Add safety check and rename ref mgmt functions
This commit is contained in:
@ -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;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user