Skip to content

Commit e1a33ed

Browse files
committed
Fix Peer request map
1 parent 9fc4f2f commit e1a33ed

File tree

1 file changed

+11
-23
lines changed

1 file changed

+11
-23
lines changed

crates/chia-sdk-client/src/request_map.rs

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
use std::{collections::HashMap, sync::Arc};
1+
use std::{
2+
collections::HashMap,
3+
sync::atomic::{AtomicU16, Ordering},
4+
};
25

36
use chia_protocol::Message;
4-
use tokio::sync::{oneshot, Mutex, OwnedSemaphorePermit, Semaphore};
7+
use tokio::sync::{oneshot, Mutex};
58

69
#[derive(Debug)]
710
pub(crate) struct Request {
811
sender: oneshot::Sender<Message>,
9-
_permit: OwnedSemaphorePermit,
1012
}
1113

1214
impl Request {
@@ -17,41 +19,27 @@ impl Request {
1719

1820
#[derive(Debug)]
1921
pub(crate) struct RequestMap {
22+
next_id: AtomicU16,
2023
items: Mutex<HashMap<u16, Request>>,
21-
semaphore: Arc<Semaphore>,
2224
}
2325

2426
impl RequestMap {
2527
pub(crate) fn new() -> Self {
2628
Self {
29+
next_id: AtomicU16::new(0),
2730
items: Mutex::new(HashMap::new()),
28-
semaphore: Arc::new(Semaphore::new(u16::MAX as usize)),
2931
}
3032
}
3133

3234
pub(crate) async fn insert(&self, sender: oneshot::Sender<Message>) -> u16 {
33-
let permit = self
34-
.semaphore
35-
.clone()
36-
.acquire_owned()
37-
.await
38-
.expect("semaphore closed");
39-
4035
let mut items = self.items.lock().await;
4136

4237
items.retain(|_, v| !v.sender.is_closed());
4338

44-
let index = (0..=u16::MAX)
45-
.find(|i| !items.contains_key(i))
46-
.expect("exceeded expected number of requests");
47-
48-
items.insert(
49-
index,
50-
Request {
51-
sender,
52-
_permit: permit,
53-
},
54-
);
39+
let index = self.next_id.fetch_add(0, Ordering::SeqCst);
40+
41+
items.insert(index, Request { sender });
42+
5543
index
5644
}
5745

0 commit comments

Comments
 (0)