diff --git a/libs/main/io_utils/piconnection.cpp b/libs/main/io_utils/piconnection.cpp index ee7d0a5b..2e0e407f 100644 --- a/libs/main/io_utils/piconnection.cpp +++ b/libs/main/io_utils/piconnection.cpp @@ -572,6 +572,8 @@ bool PIConnection::removeFilter(const PIString & name_) { void PIConnection::removeAllFilters() { + PIVector to_delete; + PIVector diags_to_delete; __device_pool__->lock(); for (auto i = extractors.begin(); i != extractors.end(); i++) { if (!i.value()) continue; @@ -581,14 +583,18 @@ void PIConnection::removeAllFilters() { it.value().removeAll(i.value()->extractor); } if (diags_.value(i.value()->extractor)) { - delete diags_.value(i.value()->extractor); + diags_to_delete << diags_.value(i.value()->extractor); + diags_.remove(i.value()->extractor); } - diags_.remove(i.value()->extractor); - delete i.value(); + to_delete << i.value(); } extractors.clear(); bounded_extractors.clear(); __device_pool__->unlock(); + for (auto e: to_delete) + delete e; + for (auto d: diags_to_delete) + delete d; }