diff options
| author | Michael Bebenita <mbebenita@mozilla.com> | 2010-08-17 23:15:14 -0700 |
|---|---|---|
| committer | Michael Bebenita <mbebenita@mozilla.com> | 2010-08-17 23:49:57 -0700 |
| commit | 6e9f0f952d758bae2b530c2c9b780f2addf10207 (patch) | |
| tree | 0b6925b02fd784c2303e7801823bf82dcf13dccc /src/rt/sync/lock_free_queue.cpp | |
| parent | 028702a798988a86da3f5700a9a4daea01dbe0b0 (diff) | |
| download | rust-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.cpp | 4 |
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; } |
