microsoft / DiskANN

Graph-structured Indices for Scalable, Fast, Fresh and Filtered Approximate Nearest Neighbor Search
Other
1.16k stars 227 forks source link

[BUG] mem leak #585

Open gaokun2 opened 2 months ago

gaokun2 commented 2 months ago

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

_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"