diff --git a/sync/wait_condition.rs b/sync/wait_condition.rs index 997b45804820f2480881cb3177d6acf845a36b75..cb170265d8237b5ef845657cf0c1ea1c29187eb6 100644 --- a/sync/wait_condition.rs +++ b/sync/wait_condition.rs @@ -1,6 +1,5 @@ use alloc::arc::Arc; use collections::Vec; -use core::mem; use spin::{Mutex, RwLock}; use context::{self, Context}; @@ -13,17 +12,17 @@ pub struct WaitCondition { impl WaitCondition { pub fn new() -> WaitCondition { WaitCondition { - contexts: Mutex::new(Vec::new()) + contexts: Mutex::new(Vec::with_capacity(16)) } } pub fn notify(&self) -> usize { - let mut contexts = Vec::new(); - mem::swap(&mut *self.contexts.lock(), &mut contexts); - for context_lock in contexts.iter() { + let mut contexts = self.contexts.lock(); + let len = contexts.len(); + while let Some(context_lock) = contexts.pop() { context_lock.write().unblock(); } - contexts.len() + len } pub fn wait(&self) {