Skip to content

Commit d43c7af

Browse files
committed
Drop unnecessary Arcs in lightning-liquidity's EventQueue
1 parent 4a9c1a6 commit d43c7af

File tree

1 file changed

+17
-21
lines changed

1 file changed

+17
-21
lines changed

lightning-liquidity/src/events/event_queue.rs

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ pub(crate) struct EventQueue<K: Deref + Clone>
2929
where
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
}
@@ -74,12 +74,7 @@ where
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

Comments
 (0)