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) {