From 288c1b3575657ddde212fd8237f1bb7685f187f9 Mon Sep 17 00:00:00 2001 From: "andrey.bychkov" Date: Wed, 5 Aug 2026 23:56:25 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20Sender::tick=20accesses=20parent->diags?= =?UTF-8?q?=5F=20without=20lock=20=E2=80=94=20data=20race=20/=20use-after-?= =?UTF-8?q?free?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/main/io_utils/piconnection.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/libs/main/io_utils/piconnection.cpp b/libs/main/io_utils/piconnection.cpp index 50f6e565..8b04f33a 100644 --- a/libs/main/io_utils/piconnection.cpp +++ b/libs/main/io_utils/piconnection.cpp @@ -1234,9 +1234,14 @@ void PIConnection::Sender::tick(int) { if (data.isEmpty()) return; // piCoutObj << "write"<write(data); - PIDiagnostics * diag = parent->diags_.value(d, nullptr); - if (diag && ret > 0) diag->sended(ret); + int ret = d->write(data); + if (ret > 0) { + PIDiagnostics * diag = nullptr; + __device_pool__->lock(); + diag = parent->diags_.value(d, nullptr); + __device_pool__->unlock(); + if (diag) diag->sended(ret); + } } }