Add safety check and rename ref mgmt functions
This commit is contained in:
parent
1eb409a666
commit
55011c2951
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user