From 6e9f0f952d758bae2b530c2c9b780f2addf10207 Mon Sep 17 00:00:00 2001 From: Michael Bebenita Date: Tue, 17 Aug 2010 23:15:14 -0700 Subject: Made the lock_free_queue lock (temporarily, until fixed). --- src/rt/sync/lock_free_queue.cpp | 4 ++++ src/rt/sync/lock_free_queue.h | 3 +++ 2 files changed, 7 insertions(+) (limited to 'src/rt') diff --git a/src/rt/sync/lock_free_queue.cpp b/src/rt/sync/lock_free_queue.cpp index 69241ece..3f859862 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; } diff --git a/src/rt/sync/lock_free_queue.h b/src/rt/sync/lock_free_queue.h index 1f09ec52..c1a309b8 100644 --- a/src/rt/sync/lock_free_queue.h +++ b/src/rt/sync/lock_free_queue.h @@ -1,6 +1,8 @@ #ifndef LOCK_FREE_QUEUE_H #define LOCK_FREE_QUEUE_H +#include "spin_lock.h" + class lock_free_queue_node { public: lock_free_queue_node *next; @@ -8,6 +10,7 @@ public: }; class lock_free_queue : lock_free_queue_node { + spin_lock lock; lock_free_queue_node *_tail; public: lock_free_queue(); -- cgit v1.2.3