|
1 | 1 | use std::collections::{BTreeMap, HashMap}; |
2 | 2 | use std::ops::Bound; |
3 | | -use std::sync::atomic::{AtomicUsize, Ordering}; |
4 | 3 | use std::sync::{Arc, RwLock, Weak}; |
5 | 4 |
|
6 | 5 | use tracing::error; |
@@ -59,9 +58,8 @@ impl Listeners { |
59 | 58 | let key_prefix = key_prefix.to_string(); |
60 | 59 | let weak_listeners = Arc::downgrade(&self.inner); |
61 | 60 | let mut inner_listener_guard = self.inner.write().unwrap(); |
62 | | - let new_idx = inner_listener_guard |
63 | | - .listener_idx |
64 | | - .fetch_add(1, Ordering::Relaxed); |
| 61 | + let new_idx = inner_listener_guard.listener_idx; |
| 62 | + inner_listener_guard.listener_idx += 1; |
65 | 63 | let callback_entry = CallbackEntry { |
66 | 64 | prefix: key_prefix.clone(), |
67 | 65 | callback: boxed_listener, |
@@ -93,7 +91,7 @@ struct InnerListeners { |
93 | 91 | // A trie would have been more efficient, but in reality we don't have |
94 | 92 | // that many listeners. |
95 | 93 | listeners: BTreeMap<String, Vec<CallbackId>>, |
96 | | - listener_idx: AtomicUsize, |
| 94 | + listener_idx: usize, |
97 | 95 | // Callbacks is a hashmap because as we delete listeners, we create "holes" in the |
98 | 96 | // callback_id -> callback mapping |
99 | 97 | callbacks: HashMap<usize, CallbackEntry>, |
@@ -171,6 +169,8 @@ impl InnerListeners { |
171 | 169 |
|
172 | 170 | #[cfg(test)] |
173 | 171 | mod tests { |
| 172 | + use std::sync::atomic::{Ordering, AtomicUsize}; |
| 173 | + |
174 | 174 | use super::*; |
175 | 175 | use crate::ChitchatId; |
176 | 176 |
|
|
0 commit comments