@@ -29,10 +29,10 @@ pub(crate) struct EventQueue<K: Deref + Clone>
2929where
3030 K :: Target : KVStore ,
3131{
32- state : Arc < Mutex < QueueState > > ,
33- waker : Arc < Mutex < Option < Waker > > > ,
32+ state : Mutex < QueueState > ,
33+ waker : Mutex < Option < Waker > > ,
3434 #[ cfg( feature = "std" ) ]
35- condvar : Arc < crate :: sync:: Condvar > ,
35+ condvar : crate :: sync:: Condvar ,
3636 kv_store : K ,
3737 persist_notifier : Arc < Notifier > ,
3838}
@@ -44,13 +44,13 @@ where
4444 pub fn new (
4545 queue : VecDeque < LiquidityEvent > , kv_store : K , persist_notifier : Arc < Notifier > ,
4646 ) -> Self {
47- let state = Arc :: new ( Mutex :: new ( QueueState { queue, needs_persist : false } ) ) ;
48- let waker = Arc :: new ( Mutex :: new ( None ) ) ;
47+ let state = Mutex :: new ( QueueState { queue, needs_persist : false } ) ;
48+ let waker = Mutex :: new ( None ) ;
4949 Self {
5050 state,
5151 waker,
5252 #[ cfg( feature = "std" ) ]
53- condvar : Arc :: new ( crate :: sync:: Condvar :: new ( ) ) ,
53+ condvar : crate :: sync:: Condvar :: new ( ) ,
5454 kv_store,
5555 persist_notifier,
5656 }
7474 }
7575
7676 pub async fn next_event_async ( & self ) -> LiquidityEvent {
77- EventFuture {
78- queue_state : Arc :: clone ( & self . state ) ,
79- waker : Arc :: clone ( & self . waker ) ,
80- persist_notifier : Arc :: clone ( & self . persist_notifier ) ,
81- }
82- . await
77+ EventFuture ( self ) . await
8378 }
8479
8580 #[ cfg( feature = "std" ) ]
@@ -213,31 +208,32 @@ where
213208 }
214209}
215210
216- struct EventFuture {
217- queue_state : Arc < Mutex < QueueState > > ,
218- waker : Arc < Mutex < Option < Waker > > > ,
219- persist_notifier : Arc < Notifier > ,
220- }
211+ struct EventFuture < ' a , K : Deref + Clone > ( & ' a EventQueue < K > )
212+ where
213+ K :: Target : KVStore ;
221214
222- impl Future for EventFuture {
215+ impl < K : Deref + Clone > Future for EventFuture < ' _ , K >
216+ where
217+ K :: Target : KVStore ,
218+ {
223219 type Output = LiquidityEvent ;
224220
225221 fn poll (
226222 self : core:: pin:: Pin < & mut Self > , cx : & mut core:: task:: Context < ' _ > ,
227223 ) -> core:: task:: Poll < Self :: Output > {
228224 let ( res, should_persist_notify) = {
229- let mut state_lock = self . queue_state . lock ( ) . unwrap ( ) ;
225+ let mut state_lock = self . 0 . state . lock ( ) . unwrap ( ) ;
230226 if let Some ( event) = state_lock. queue . pop_front ( ) {
231227 state_lock. needs_persist = true ;
232228 ( Poll :: Ready ( event) , true )
233229 } else {
234- * self . waker . lock ( ) . unwrap ( ) = Some ( cx. waker ( ) . clone ( ) ) ;
230+ * self . 0 . waker . lock ( ) . unwrap ( ) = Some ( cx. waker ( ) . clone ( ) ) ;
235231 ( Poll :: Pending , false )
236232 }
237233 } ;
238234
239235 if should_persist_notify {
240- self . persist_notifier . notify ( ) ;
236+ self . 0 . persist_notifier . notify ( ) ;
241237 }
242238
243239 res
0 commit comments