Add safety check and rename ref mgmt functions

This commit is contained in:
Johan Wikman
2017-04-25 11:12:23 +03:00
parent 1eb409a666
commit 55011c2951
3 changed files with 12 additions and 9 deletions

View File

@ -55,8 +55,8 @@ protected:
private: private:
friend class Worker; friend class Worker;
void inc_count(); void inc_ref();
void dec_count(); void dec_ref();
private: private:
int32_t m_count; int32_t m_count;

View File

@ -549,7 +549,7 @@ bool Worker::execute(std::auto_ptr<DisposableTask> sTask)
// private // private
bool Worker::execute_disposable(DisposableTask* pTask) bool Worker::execute_disposable(DisposableTask* pTask)
{ {
pTask->inc_count(); pTask->inc_ref();
intptr_t arg1 = reinterpret_cast<intptr_t>(pTask); intptr_t arg1 = reinterpret_cast<intptr_t>(pTask);
@ -557,7 +557,7 @@ bool Worker::execute_disposable(DisposableTask* pTask)
if (!posted) if (!posted)
{ {
pTask->dec_count(); pTask->dec_ref();
} }
return posted; return posted;
@ -585,7 +585,7 @@ size_t Worker::execute_on_all(Task* pTask, Semaphore* pSem)
size_t Worker::execute_on_all(std::auto_ptr<DisposableTask> sTask) size_t Worker::execute_on_all(std::auto_ptr<DisposableTask> sTask)
{ {
DisposableTask* pTask = sTask.release(); DisposableTask* pTask = sTask.release();
pTask->inc_count(); pTask->inc_ref();
size_t n = 0; size_t n = 0;
@ -599,7 +599,7 @@ size_t Worker::execute_on_all(std::auto_ptr<DisposableTask> sTask)
} }
} }
pTask->dec_count(); pTask->dec_ref();
return n; return n;
} }
@ -838,7 +838,7 @@ void Worker::handle_message(MessageQueue& queue, const MessageQueue::Message& ms
{ {
DisposableTask *pTask = reinterpret_cast<DisposableTask*>(msg.arg1()); DisposableTask *pTask = reinterpret_cast<DisposableTask*>(msg.arg1());
pTask->execute(*this); pTask->execute(*this);
pTask->dec_count(); pTask->dec_ref();
} }
break; break;

View File

@ -13,6 +13,7 @@
#include "maxscale/workertask.hh" #include "maxscale/workertask.hh"
#include <maxscale/atomic.h> #include <maxscale/atomic.h>
#include <maxscale/debug.h>
namespace maxscale namespace maxscale
{ {
@ -32,13 +33,15 @@ WorkerDisposableTask::WorkerDisposableTask()
{ {
} }
void WorkerDisposableTask::inc_count() void WorkerDisposableTask::inc_ref()
{ {
atomic_add(&m_count, 1); atomic_add(&m_count, 1);
} }
void WorkerDisposableTask::dec_count() void WorkerDisposableTask::dec_ref()
{ {
ss_dassert(atomic_read(&m_count) > 0);
if (atomic_add(&m_count, -1) == 1) if (atomic_add(&m_count, -1) == 1)
{ {
delete this; delete this;