wayland: global counter for client serials

This commit is contained in:
Victor Berger 2018-10-02 23:52:35 +02:00 committed by Victor Berger
parent a77e29d9b5
commit 1301fb6e62
1 changed files with 33 additions and 0 deletions

View File

@ -12,8 +12,41 @@
//! destroy the global at all, you don't need to bother keeping the
//! `Global` around.
use std::sync::Mutex;
pub mod compositor;
pub mod output;
pub mod seat;
pub mod shell;
pub mod shm;
lazy_static! {
/// A global SerialCounter for use in your compositor.
///
/// Is is also used internally by some parts of Smithay.
pub static ref SERIAL_COUNTER: SerialCounter = SerialCounter {
serial: Mutex::new(0)
};
}
/// A counter for generating serials, for use in the client protocol
///
/// A global instance of this counter is available as the `SERIAL_COUNTER`
/// static. It is recommended to only use this global counter to ensure the
/// uniqueness of serials.
///
/// The counter will wrap around on overflow, ensuring it can run for as long
/// as needed.
pub struct SerialCounter {
// TODO: replace with an AtomicU32 when stabilized
serial: Mutex<u32>,
}
impl SerialCounter {
/// Retrieve the next serial from the counter
pub fn next_serial(&self) -> u32 {
let guard = self.serial.lock().unwrap();
guard.wrapping_add(1);
*guard
}
}