id summary reporter owner description type status milestone component version severity resolution keywords cc 10726 boost::lockfree::queue doesn't seem to free memory though destructors on every collection objects are invoked ableabhijeet@… timblechmann "The problem here is, boost::lockfree::queue doesn't free memory once it is allocated. Why freelist nodes are not returned to OS? destructors on individual collection objects are invoked. {{{ #include #include #include #include using namespace std; using namespace boost; struct Record { char str[128]; Record(const char* rec) { memset(this->str, 0, sizeof(this->str)); strcpy_s(this->str, rec); } ~Record() { cout << ""~Record "" << this->str << endl; } Record& operator= (const Record& rec) { if (this == &rec) { return *this; } memset(this->str, 0, sizeof(this->str)); strcpy_s(this->str, rec.str); return *this; } }; typedef boost::lockfree::queue> RecordsQueue; RecordsQueue Records(10000); class MyClass { public: void FillThread() { int i = 0; while (true) { Record *rec = new Record(to_string(i).c_str()); Records.push(rec); i++; }; } void ProcessThread() { while (true) { Record *rec; Records.pop(rec); { cout << ""Record "" << rec->str << endl; delete rec; } }; } }; int _tmain(int argc, _TCHAR* argv[]) { boost::thread* thread1, *thread2; MyClass myObj; thread1 = new boost::thread(boost::bind(&MyClass::FillThread, myObj)); HANDLE threadHandle1 = thread1->native_handle(); SetThreadPriority(threadHandle1, THREAD_PRIORITY_NORMAL); boost::this_thread::sleep(boost::posix_time::seconds(1)); thread2 = new boost::thread(boost::bind(&MyClass::ProcessThread, myObj)); HANDLE threadHandle2 = thread2->native_handle(); SetThreadPriority(threadHandle2, THREAD_PRIORITY_NORMAL); thread1->join(); thread2->join(); return 0; } }}} " Bugs closed To Be Determined lockfree Boost 1.56.0 Problem invalid boost lockfree queue