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:
friend class Worker;
void inc_count();
void dec_count();
void inc_ref();
void dec_ref();
private:
int32_t m_count;

View File

@ -549,7 +549,7 @@ bool Worker::execute(std::auto_ptr<DisposableTask> sTask)
// private
bool Worker::execute_disposable(DisposableTask* pTask)
{
pTask->inc_count();
pTask->inc_ref();
intptr_t arg1 = reinterpret_cast<intptr_t>(pTask);
@ -557,7 +557,7 @@ bool Worker::execute_disposable(DisposableTask* pTask)
if (!posted)
{
pTask->dec_count();
pTask->dec_ref();
}
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)
{
DisposableTask* pTask = sTask.release();
pTask->inc_count();
pTask->inc_ref();
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;
}
@ -838,7 +838,7 @@ void Worker::handle_message(MessageQueue& queue, const MessageQueue::Message& ms
{
DisposableTask *pTask = reinterpret_cast<DisposableTask*>(msg.arg1());
pTask->execute(*this);
pTask->dec_count();
pTask->dec_ref();
}
break;

View File

@ -13,6 +13,7 @@
#include "maxscale/workertask.hh"
#include <maxscale/atomic.h>
#include <maxscale/debug.h>
namespace maxscale
{
@ -32,13 +33,15 @@ WorkerDisposableTask::WorkerDisposableTask()
{
}
void WorkerDisposableTask::inc_count()
void WorkerDisposableTask::inc_ref()
{
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)
{
delete this;