Acquire CCheckQueue's lock to avoid race condition
This fixes a potential race condition in the CCheckQueueControl constructor, which was looking directly at data in CCheckQueue without acquiring its lock. Remove the now-unnecessary friendship for CCheckQueueControl
This commit is contained in:
parent
b6acd4563d
commit
cf008ac8c3
1 changed files with 8 additions and 4 deletions
|
@ -161,7 +161,12 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
friend class CCheckQueueControl<T>;
|
bool IsIdle()
|
||||||
|
{
|
||||||
|
boost::unique_lock<boost::mutex> lock(mutex);
|
||||||
|
return (nTotal == nIdle && nTodo == 0 && fAllOk == true);
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -180,9 +185,8 @@ public:
|
||||||
{
|
{
|
||||||
// passed queue is supposed to be unused, or NULL
|
// passed queue is supposed to be unused, or NULL
|
||||||
if (pqueue != NULL) {
|
if (pqueue != NULL) {
|
||||||
assert(pqueue->nTotal == pqueue->nIdle);
|
bool isIdle = pqueue->IsIdle();
|
||||||
assert(pqueue->nTodo == 0);
|
assert(isIdle);
|
||||||
assert(pqueue->fAllOk == true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue