In scratch.h class ScratchStoreManager,
in member function destroy:
<<<<<<
while (!_scratch_pool.empty()) {
auto scratch = _scratch_pool.pop();
while (scratch == nullptr) {
_scratch_pool.wait_for_push_notify();
scratch = _scratch_pool.pop();
}
delete scratch;
}
the bellowing codes should be replaced by following codes
_scratch_pool.push(_scratch);
_scratch_pool.push_notify_all();
while (!_scratch_pool.empty())
{
auto scratch = _scratch_pool.pop();
while (scratch == nullptr)
{
_scratch_pool.wait_for_push_notify();
scratch = _scratch_pool.pop();
}
delete scratch;
}
_scratch = nullptr;
in deconstructor function:
<<<<<<
_scratch->clear();
_scratch_pool.push(_scratch);
_scratch_pool.push_notify_all();
the bellowing codes should be replaced by following codes
if (_scratch)
{
_scratch->clear();
_scratch_pool.push(_scratch);
_scratch_pool.push_notify_all();
}
Additional Details
origin code will cause one object in multithread-queue does not deconstruct, which object is member "_scratch"
Error
In scratch.h class ScratchStoreManager, in member function destroy: <<<<<< while (!_scratch_pool.empty()) { auto scratch = _scratch_pool.pop(); while (scratch == nullptr) { _scratch_pool.wait_for_push_notify(); scratch = _scratch_pool.pop(); } delete scratch; } the bellowing codes should be replaced by following codes
Additional Details
origin code will cause one object in multithread-queue does not deconstruct, which object is member "_scratch"