Skip to content

Commit e212ceb

Browse files
committed
utils/pollable_channel: Add send_many method
The send_many method is more convinient, should be more efficient and can also be more robust - all of the messages are sent atomically. Signed-off-by: Matej Hrica <[email protected]>
1 parent 0a81805 commit e212ceb

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

src/utils/src/pollable_channel.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,16 @@ impl<T: Send> PollableChannelSender<T> {
3838
self.inner.eventfd.write(1)?;
3939
Ok(())
4040
}
41+
42+
pub fn send_many<I: IntoIterator<Item = T>>(&self, msg_iterator: I) -> io::Result<()> {
43+
let msg_iterator = msg_iterator.into_iter();
44+
let mut data_lock = self.inner.queue.lock().unwrap();
45+
let old_len = data_lock.len();
46+
data_lock.extend(msg_iterator);
47+
let num_added_items = data_lock.len() - old_len;
48+
self.inner.eventfd.write(num_added_items as u64)?;
49+
Ok(())
50+
}
4151
}
4252

4353
pub struct PollableChannelReciever<T: Send> {

0 commit comments

Comments
 (0)