about summary refs log tree commit diff
path: root/src/rt/sync/lock_free_queue.cpp
diff options
context:
space:
mode:
authorMichael Bebenita <mbebenita@mozilla.com>2010-08-17 23:15:14 -0700
committerMichael Bebenita <mbebenita@mozilla.com>2010-08-17 23:49:57 -0700
commit6e9f0f952d758bae2b530c2c9b780f2addf10207 (patch)
tree0b6925b02fd784c2303e7801823bf82dcf13dccc /src/rt/sync/lock_free_queue.cpp
parent028702a798988a86da3f5700a9a4daea01dbe0b0 (diff)
downloadrust-6e9f0f952d758bae2b530c2c9b780f2addf10207.tar.gz
rust-6e9f0f952d758bae2b530c2c9b780f2addf10207.zip
Made the lock_free_queue lock (temporarily, until fixed).
Diffstat (limited to 'src/rt/sync/lock_free_queue.cpp')
-rw-r--r--src/rt/sync/lock_free_queue.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/rt/sync/lock_free_queue.cpp b/src/rt/sync/lock_free_queue.cpp
index 69241eced55..3f8598629b4 100644
--- a/src/rt/sync/lock_free_queue.cpp
+++ b/src/rt/sync/lock_free_queue.cpp
@@ -18,6 +18,7 @@ lock_free_queue::lock_free_queue() : _tail(this) {
 
 void
 lock_free_queue::enqueue(lock_free_queue_node *item) {
+    lock.lock();
     item->next = (lock_free_queue_node *) NULL;
     lock_free_queue_node *last = _tail;
     _tail = item;
@@ -25,10 +26,12 @@ lock_free_queue::enqueue(lock_free_queue_node *item) {
         last = last->next;
     }
     last->next = item;
+    lock.unlock();
 }
 
 lock_free_queue_node *
 lock_free_queue::dequeue() {
+    lock.lock();
     lock_free_queue_node *item = next;
     if (item && !(next = item->next)) {
         _tail = (lock_free_queue_node *) this;
@@ -41,6 +44,7 @@ lock_free_queue::dequeue() {
             } while ((lost = help) != (lock_free_queue_node *) NULL);
         }
     }
+    lock.unlock();
     return item;
 }