socket is atomic

This commit is contained in:
2025-05-07 16:06:45 -07:00
parent 9583a87f2f
commit 6cd5d1f256
5 changed files with 23 additions and 26 deletions

View File

@@ -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(())
} }

View File

@@ -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(&current_id, &mut offset); request.write_u32(&current_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(())
} }

View File

@@ -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)?;

View File

@@ -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(&current_id, &mut offset); request.write_u32(&current_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(())
} }

View File

@@ -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);