Race condition fix

c++11
scrawl 10 years ago
parent 35b2d91fb3
commit 9c86d4f8bc

@ -25,6 +25,7 @@ void WorkTicket::signalDone()
WorkItem::WorkItem()
: mTicket(new WorkTicket)
{
mTicket->setThreadSafeRefUnref(true);
}
WorkItem::~WorkItem()
@ -73,9 +74,9 @@ WorkQueue::~WorkQueue()
}
}
WorkTicket* WorkQueue::addWorkItem(WorkItem *item)
osg::ref_ptr<WorkTicket> WorkQueue::addWorkItem(WorkItem *item)
{
WorkTicket* ticket = item->getTicket().get();
osg::ref_ptr<WorkTicket> ticket = item->getTicket();
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(mMutex);
mQueue.push(item);
mCondition.signal();

@ -65,7 +65,7 @@ namespace SceneUtil
/// Add a new work item to the back of the queue.
/// @par The returned WorkTicket may be used by the caller to wait until the work is complete.
WorkTicket* addWorkItem(WorkItem* item);
osg::ref_ptr<WorkTicket> addWorkItem(WorkItem* item);
/// Get the next work item from the front of the queue. If the queue is empty, waits until a new item is added.
/// If the workqueue is in the process of being destroyed, may return NULL.

Loading…
Cancel
Save