From 4f601a940844d3f52d9e0e8cdf630ad419ffb8ea Mon Sep 17 00:00:00 2001 From: "andrey.bychkov" Date: Wed, 5 Aug 2026 23:55:59 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20removeAllFilters=20holds=20lock=20during?= =?UTF-8?q?=20delete=20=E2=80=94=20move=20destructors=20outside=20lock=20s?= =?UTF-8?q?cope?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/main/io_utils/piconnection.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) 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; }