diff --git a/src/ifcgeom/Iterator.h b/src/ifcgeom/Iterator.h index e6e9dd42b0..199566bc14 100644 --- a/src/ifcgeom/Iterator.h +++ b/src/ifcgeom/Iterator.h @@ -663,6 +663,10 @@ namespace IfcGeom { /// Use get() to retrieve the created geometry. const IfcUtil::IfcBaseClass* next() { using std::chrono::high_resolution_clock; + + delete *task_result_iterator_; + delete *native_task_result_iterator_; + if (num_threads_ != 1) { if (!wait_for_element()) { Logger::SetProduct(boost::none); @@ -885,19 +889,16 @@ namespace IfcGeom { init_future_.wait(); } } - - if (settings_.get().get() != ifcopenshell::geometry::settings::NATIVE) { - for (auto& p : all_processed_native_elements_) { - delete p; - } - } for (auto& k : kernel_pool) { delete k; } - - for (auto& p : all_processed_elements_) { - delete p; + + if (task_result_ptr_initialized) { + while (task_result_iterator_ != --all_processed_elements_.end()) { + delete *task_result_iterator_++; + delete *native_task_result_iterator_++; + } } delete converter_;