socket is atomic
This commit is contained in:
@@ -36,7 +36,7 @@ impl WlClient {
|
|||||||
request.write_u32(&OVERLAY, &mut offset);
|
request.write_u32(&OVERLAY, &mut offset);
|
||||||
request.write_string(&NAMESPACE.to_string(), &mut offset);
|
request.write_string(&NAMESPACE.to_string(), &mut offset);
|
||||||
|
|
||||||
self.socket.write(&request)?;
|
self.socket.lock().unwrap().write(&request)?;
|
||||||
self.layer_surface_id.store(current_id, Ordering::Relaxed);
|
self.layer_surface_id.store(current_id, Ordering::Relaxed);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -67,7 +67,7 @@ impl WlClient {
|
|||||||
|
|
||||||
request.write_u32(&serial, &mut offset);
|
request.write_u32(&serial, &mut offset);
|
||||||
|
|
||||||
self.socket.write(&request)?;
|
self.socket.lock().unwrap().write(&request)?;
|
||||||
|
|
||||||
self.wl_surface_attach()?;
|
self.wl_surface_attach()?;
|
||||||
self.wl_surface_commit()?;
|
self.wl_surface_commit()?;
|
||||||
@@ -93,7 +93,7 @@ impl WlClient {
|
|||||||
request.write_u32(&width, &mut offset);
|
request.write_u32(&width, &mut offset);
|
||||||
request.write_u32(&height, &mut offset);
|
request.write_u32(&height, &mut offset);
|
||||||
|
|
||||||
self.socket.write(&request)?;
|
self.socket.lock().unwrap().write(&request)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -115,7 +115,7 @@ impl WlClient {
|
|||||||
|
|
||||||
request.write_u32(&EXCLUSIVE, &mut offset);
|
request.write_u32(&EXCLUSIVE, &mut offset);
|
||||||
|
|
||||||
self.socket.write(&request)?;
|
self.socket.lock().unwrap().write(&request)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ impl WlClient {
|
|||||||
let current_id = self.current_id.fetch_add(1, Ordering::Relaxed) + 1;
|
let current_id = self.current_id.fetch_add(1, Ordering::Relaxed) + 1;
|
||||||
request.write_u32(¤t_id, &mut offset);
|
request.write_u32(¤t_id, &mut offset);
|
||||||
|
|
||||||
self.socket.write(&request)?;
|
self.socket.lock().unwrap().write(&request)?;
|
||||||
|
|
||||||
self.surface_id.store(current_id, Ordering::Relaxed);
|
self.surface_id.store(current_id, Ordering::Relaxed);
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ impl WlClient {
|
|||||||
request.write_u32(&X, &mut offset);
|
request.write_u32(&X, &mut offset);
|
||||||
request.write_u32(&Y, &mut offset);
|
request.write_u32(&Y, &mut offset);
|
||||||
|
|
||||||
self.socket.write(&request)?;
|
self.socket.lock().unwrap().write(&request)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -84,7 +84,7 @@ impl WlClient {
|
|||||||
request.write_u16(&OPCODE, &mut offset);
|
request.write_u16(&OPCODE, &mut offset);
|
||||||
request.write_u16(&MSG_SIZE, &mut offset);
|
request.write_u16(&MSG_SIZE, &mut offset);
|
||||||
|
|
||||||
self.socket.write(&request)?;
|
self.socket.lock().unwrap().write(&request)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -106,7 +106,7 @@ impl WlClient {
|
|||||||
request.write_u16(&MSG_SIZE, &mut offset);
|
request.write_u16(&MSG_SIZE, &mut offset);
|
||||||
request.write_u32(&serial, &mut offset);
|
request.write_u32(&serial, &mut offset);
|
||||||
|
|
||||||
self.socket.write(&request)?;
|
self.socket.lock().unwrap().write(&request)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ struct WlHeader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub struct WlClient {
|
pub struct WlClient {
|
||||||
pub socket: UnixStream,
|
pub socket: Mutex<UnixStream>,
|
||||||
pub current_id: AtomicU32,
|
pub current_id: AtomicU32,
|
||||||
pub registry_id: AtomicU32,
|
pub registry_id: AtomicU32,
|
||||||
pub shm_id: AtomicU32,
|
pub shm_id: AtomicU32,
|
||||||
pub shm_pool: Arc<Mutex<Option<shm::ShmPool>>>,
|
pub shm_pool: Mutex<Option<shm::ShmPool>>,
|
||||||
pub buffer_id: AtomicU32,
|
pub buffer_id: AtomicU32,
|
||||||
pub compositor_id: AtomicU32,
|
pub compositor_id: AtomicU32,
|
||||||
pub surface_id: AtomicU32,
|
pub surface_id: AtomicU32,
|
||||||
@@ -31,11 +31,11 @@ impl WlClient {
|
|||||||
))?;
|
))?;
|
||||||
|
|
||||||
let mut wl_client = WlClient {
|
let mut wl_client = WlClient {
|
||||||
socket: sock,
|
socket: Mutex::new(sock),
|
||||||
current_id: AtomicU32::from(1),
|
current_id: AtomicU32::from(1),
|
||||||
registry_id: AtomicU32::from(0),
|
registry_id: AtomicU32::from(0),
|
||||||
shm_id: AtomicU32::from(0),
|
shm_id: AtomicU32::from(0),
|
||||||
shm_pool: Arc::new(Mutex::new(None)),
|
shm_pool: Mutex::new(None),
|
||||||
buffer_id: AtomicU32::from(0),
|
buffer_id: AtomicU32::from(0),
|
||||||
compositor_id: AtomicU32::from(0),
|
compositor_id: AtomicU32::from(0),
|
||||||
surface_id: AtomicU32::from(0),
|
surface_id: AtomicU32::from(0),
|
||||||
@@ -44,18 +44,13 @@ impl WlClient {
|
|||||||
layer_surface_id: AtomicU32::from(0),
|
layer_surface_id: AtomicU32::from(0),
|
||||||
};
|
};
|
||||||
|
|
||||||
let shm_pool = wl_client.shm_pool.clone();
|
wl_client.wl_display_get_registry()?;
|
||||||
|
|
||||||
thread::spawn(move || {
|
thread::spawn(move || {
|
||||||
}).join();
|
}).join();
|
||||||
|
|
||||||
wl_client.wl_display_get_registry()?;
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
wl_client.read_event()?;
|
wl_client.read_event();
|
||||||
|
|
||||||
if false {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(wl_client)
|
Ok(wl_client)
|
||||||
@@ -65,7 +60,8 @@ impl WlClient {
|
|||||||
// TODO: Don't realloc header and event
|
// TODO: Don't realloc header and event
|
||||||
|
|
||||||
let mut header = vec![0u8; 8];
|
let mut header = vec![0u8; 8];
|
||||||
self.socket.read_exact(&mut header)?;
|
let mut socket = self.socket.lock().unwrap();
|
||||||
|
socket.read_exact(&mut header)?;
|
||||||
|
|
||||||
let header = WlHeader {
|
let header = WlHeader {
|
||||||
object: u32::from_ne_bytes(header[0..4].try_into()?),
|
object: u32::from_ne_bytes(header[0..4].try_into()?),
|
||||||
@@ -74,7 +70,8 @@ impl WlClient {
|
|||||||
};
|
};
|
||||||
|
|
||||||
let mut event = vec![0u8; header.size as usize - 8];
|
let mut event = vec![0u8; header.size as usize - 8];
|
||||||
self.socket.read_exact(&mut event)?;
|
socket.read_exact(&mut event)?;
|
||||||
|
drop(socket);
|
||||||
|
|
||||||
if header.object == self.registry_id.load(Ordering::Relaxed) && header.opcode == 0 { // wl_registry::global
|
if header.object == self.registry_id.load(Ordering::Relaxed) && header.opcode == 0 { // wl_registry::global
|
||||||
self.wl_registry_global(&event)?;
|
self.wl_registry_global(&event)?;
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ impl WlClient {
|
|||||||
let current_id = self.current_id.fetch_add(1, Ordering::Relaxed) + 1;
|
let current_id = self.current_id.fetch_add(1, Ordering::Relaxed) + 1;
|
||||||
request.write_u32(¤t_id, &mut offset);
|
request.write_u32(¤t_id, &mut offset);
|
||||||
|
|
||||||
self.socket.write(&request)?;
|
self.socket.lock().unwrap().write(&request)?;
|
||||||
self.registry_id.store(current_id, Ordering::Relaxed);
|
self.registry_id.store(current_id, Ordering::Relaxed);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -143,7 +143,7 @@ impl WlClient {
|
|||||||
request.write_u32 (&version, &mut offset);
|
request.write_u32 (&version, &mut offset);
|
||||||
request.write_u32 (&id, &mut offset);
|
request.write_u32 (&id, &mut offset);
|
||||||
|
|
||||||
self.socket.write(&request)?;
|
self.socket.lock().unwrap().write(&request)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ impl WlClient {
|
|||||||
).into());
|
).into());
|
||||||
}
|
}
|
||||||
|
|
||||||
self.socket.send_vectored_with_ancillary(&[std::io::IoSlice::new(&request)], &mut ancillary)?;
|
self.socket.lock().unwrap().send_vectored_with_ancillary(&[std::io::IoSlice::new(&request)], &mut ancillary)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@@ -84,7 +84,7 @@ impl WlClient {
|
|||||||
request.write_u32(&stride, &mut offset);
|
request.write_u32(&stride, &mut offset);
|
||||||
request.write_u32(&format, &mut offset);
|
request.write_u32(&format, &mut offset);
|
||||||
|
|
||||||
self.socket.write(&request)?;
|
self.socket.lock().unwrap().write(&request)?;
|
||||||
|
|
||||||
self.buffer_id.store(current_id, Ordering::Relaxed);
|
self.buffer_id.store(current_id, Ordering::Relaxed);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user