diff --git a/Cargo.lock b/Cargo.lock index f840b0f..b93be8e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1992,8 +1992,6 @@ dependencies = [ "async-fs", "async-io", "blocking", - "concurrent-queue", - "event-listener", "futures-lite", "mlua", "rustc-hash 2.1.1", diff --git a/crates/mlua-luau-scheduler/Cargo.toml b/crates/mlua-luau-scheduler/Cargo.toml index 078f641..99cdea9 100644 --- a/crates/mlua-luau-scheduler/Cargo.toml +++ b/crates/mlua-luau-scheduler/Cargo.toml @@ -18,8 +18,6 @@ workspace = true [dependencies] async-executor = "1.13" blocking = "1.6" -concurrent-queue = "2.5" -event-listener = "5.4" futures-lite = "2.6" rustc-hash = "2.1" tracing = "0.1" diff --git a/crates/mlua-luau-scheduler/src/events/mod.rs b/crates/mlua-luau-scheduler/src/events/mod.rs new file mode 100644 index 0000000..76ee36f --- /dev/null +++ b/crates/mlua-luau-scheduler/src/events/mod.rs @@ -0,0 +1,5 @@ +mod multi; +mod once; + +pub(crate) use self::multi::MultiEvent; +pub(crate) use self::once::OnceEvent; diff --git a/crates/mlua-luau-scheduler/src/queue/event.rs b/crates/mlua-luau-scheduler/src/events/multi.rs similarity index 83% rename from crates/mlua-luau-scheduler/src/queue/event.rs rename to crates/mlua-luau-scheduler/src/events/multi.rs index ad012ce..df6e8c0 100644 --- a/crates/mlua-luau-scheduler/src/queue/event.rs +++ b/crates/mlua-luau-scheduler/src/events/multi.rs @@ -8,10 +8,10 @@ use std::{ }; /** - Internal state for queue events. + Internal state for events. */ #[derive(Debug, Default)] -struct QueueEventState { +struct MultiEventState { generation: Cell, wakers: RefCell>, } @@ -20,11 +20,11 @@ struct QueueEventState { A single-threaded event signal that can be notified multiple times. */ #[derive(Debug, Clone, Default)] -pub(crate) struct QueueEvent { - state: Rc, +pub(crate) struct MultiEvent { + state: Rc, } -impl QueueEvent { +impl MultiEvent { /** Creates a new event. */ @@ -51,8 +51,8 @@ impl QueueEvent { /** Creates a listener that implements `Future` and resolves when `notify` is called. */ - pub fn listen(&self) -> QueueListener { - QueueListener { + pub fn listen(&self) -> MultiListener { + MultiListener { state: self.state.clone(), generation: self.state.generation.get(), } @@ -63,12 +63,12 @@ impl QueueEvent { A listener future that resolves when the corresponding [`QueueEvent`] is notified. */ #[derive(Debug)] -pub(crate) struct QueueListener { - state: Rc, +pub(crate) struct MultiListener { + state: Rc, generation: u64, } -impl Future for QueueListener { +impl Future for MultiListener { type Output = (); fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll { @@ -88,4 +88,4 @@ impl Future for QueueListener { } } -impl Unpin for QueueListener {} +impl Unpin for MultiListener {} diff --git a/crates/mlua-luau-scheduler/src/threads/event.rs b/crates/mlua-luau-scheduler/src/events/once.rs similarity index 100% rename from crates/mlua-luau-scheduler/src/threads/event.rs rename to crates/mlua-luau-scheduler/src/events/once.rs diff --git a/crates/mlua-luau-scheduler/src/exit.rs b/crates/mlua-luau-scheduler/src/exit.rs index d8d9bd3..5036a9a 100644 --- a/crates/mlua-luau-scheduler/src/exit.rs +++ b/crates/mlua-luau-scheduler/src/exit.rs @@ -1,24 +1,24 @@ use std::{cell::Cell, rc::Rc}; -use event_listener::Event; +use crate::events::OnceEvent; #[derive(Debug, Clone)] pub(crate) struct Exit { code: Rc>>, - event: Rc, + event: OnceEvent, } impl Exit { pub fn new() -> Self { Self { code: Rc::new(Cell::new(None)), - event: Rc::new(Event::new()), + event: OnceEvent::new(), } } pub fn set(&self, code: u8) { self.code.set(Some(code)); - self.event.notify(usize::MAX); + self.event.notify(); } pub fn get(&self) -> Option { diff --git a/crates/mlua-luau-scheduler/src/lib.rs b/crates/mlua-luau-scheduler/src/lib.rs index 68a7beb..e961e3f 100644 --- a/crates/mlua-luau-scheduler/src/lib.rs +++ b/crates/mlua-luau-scheduler/src/lib.rs @@ -1,6 +1,7 @@ #![allow(clippy::cargo_common_metadata)] mod error_callback; +mod events; mod exit; mod functions; mod queue; diff --git a/crates/mlua-luau-scheduler/src/queue/futures.rs b/crates/mlua-luau-scheduler/src/queue/futures.rs index 9edab7e..8648485 100644 --- a/crates/mlua-luau-scheduler/src/queue/futures.rs +++ b/crates/mlua-luau-scheduler/src/queue/futures.rs @@ -2,20 +2,20 @@ use std::{cell::RefCell, mem, pin::Pin, rc::Rc}; use futures_lite::prelude::*; -use super::event::QueueEvent; +use crate::events::MultiEvent; pub type LocalBoxFuture<'fut> = Pin + 'fut>>; struct FuturesQueueInner<'fut> { queue: RefCell>>, - event: QueueEvent, + event: MultiEvent, } impl FuturesQueueInner<'_> { pub fn new() -> Self { Self { queue: RefCell::new(Vec::new()), - event: QueueEvent::new(), + event: MultiEvent::new(), } } } diff --git a/crates/mlua-luau-scheduler/src/queue/mod.rs b/crates/mlua-luau-scheduler/src/queue/mod.rs index 97dc2e5..3763e11 100644 --- a/crates/mlua-luau-scheduler/src/queue/mod.rs +++ b/crates/mlua-luau-scheduler/src/queue/mod.rs @@ -1,5 +1,4 @@ mod deferred; -mod event; mod futures; mod spawned; mod threads; diff --git a/crates/mlua-luau-scheduler/src/queue/threads.rs b/crates/mlua-luau-scheduler/src/queue/threads.rs index 122d196..3c1f941 100644 --- a/crates/mlua-luau-scheduler/src/queue/threads.rs +++ b/crates/mlua-luau-scheduler/src/queue/threads.rs @@ -6,19 +6,19 @@ use mlua::prelude::*; use crate::{threads::ThreadId, traits::IntoLuaThread}; -use super::event::QueueEvent; +use crate::events::MultiEvent; #[derive(Debug)] struct ThreadQueueInner { queue: RefCell>, - event: QueueEvent, + event: MultiEvent, } impl ThreadQueueInner { fn new() -> Self { Self { queue: RefCell::new(Vec::new()), - event: QueueEvent::new(), + event: MultiEvent::new(), } } } diff --git a/crates/mlua-luau-scheduler/src/threads/map.rs b/crates/mlua-luau-scheduler/src/threads/map.rs index a3c6794..dfbf18d 100644 --- a/crates/mlua-luau-scheduler/src/threads/map.rs +++ b/crates/mlua-luau-scheduler/src/threads/map.rs @@ -5,7 +5,8 @@ use std::{cell::RefCell, rc::Rc}; use mlua::prelude::*; use rustc_hash::FxHashMap; -use super::{event::OnceEvent, id::ThreadId}; +use super::id::ThreadId; +use crate::events::OnceEvent; struct ThreadEvent { result: Option>, diff --git a/crates/mlua-luau-scheduler/src/threads/mod.rs b/crates/mlua-luau-scheduler/src/threads/mod.rs index 4ec6006..21683b2 100644 --- a/crates/mlua-luau-scheduler/src/threads/mod.rs +++ b/crates/mlua-luau-scheduler/src/threads/mod.rs @@ -1,4 +1,3 @@ -mod event; mod id; mod map;