Merge pull request #6927 from lrineau/Mesh_3-fix_leaks-GF

Mesh_3: Fix a memory leak in the parallel code
This commit is contained in:
Laurent Rineau 2022-10-07 15:46:34 +02:00
commit 4a26b482a7
1 changed files with 7 additions and 7 deletions

View File

@ -739,7 +739,8 @@ public:
{ {
int num_flushed_items = 0; int num_flushed_items = 0;
std::vector<WorkBatchTask*> tasks; std::vector<WorkBatchTask> tasks;
tasks.reserve(m_tls_work_buffers.size());
for (TLS_WorkBuffer::iterator it_buffer = m_tls_work_buffers.begin() ; for (TLS_WorkBuffer::iterator it_buffer = m_tls_work_buffers.begin() ;
it_buffer != m_tls_work_buffers.end() ; it_buffer != m_tls_work_buffers.end() ;
@ -753,7 +754,7 @@ public:
} }
} }
for (std::vector<WorkBatchTask*>::const_iterator it = tasks.begin() ; for (auto it = tasks.begin() ;
it != tasks.end() ; ++it) it != tasks.end() ; ++it)
{ {
enqueue_task(*it, task_group); enqueue_task(*it, task_group);
@ -772,16 +773,15 @@ protected:
typedef WorkBatch WorkBuffer; typedef WorkBatch WorkBuffer;
typedef tbb::enumerable_thread_specific<WorkBuffer> TLS_WorkBuffer; typedef tbb::enumerable_thread_specific<WorkBuffer> TLS_WorkBuffer;
WorkBatchTask *create_task(const WorkBuffer &wb) const WorkBatchTask create_task(const WorkBuffer &wb) const
{ {
auto ptr = tbb::scalable_allocator<WorkBatchTask>().allocate(1); return { wb };
return new(ptr) WorkBatchTask(wb);
} }
void enqueue_task(WorkBatchTask *task, void enqueue_task(const WorkBatchTask& task,
tbb::task_group &task_group) const tbb::task_group &task_group) const
{ {
task_group.run(*task); task_group.run(task);
} }
void add_batch_and_enqueue_task(const WorkBuffer &wb, void add_batch_and_enqueue_task(const WorkBuffer &wb,