fix: Sender::tick accesses parent->diags_ without lock — data race / use-after-free

This commit is contained in:
2026-08-06 09:08:17 +03:00
parent f188b02a93
commit 90135c5e52
+7 -2
View File
@@ -1235,8 +1235,13 @@ void PIConnection::Sender::tick(int) {
// piCoutObj << "write"<<data.size()<<"bytes to"<<devices.size()<<"devices"; // piCoutObj << "write"<<data.size()<<"bytes to"<<devices.size()<<"devices";
for (PIIODevice * d: devices) { for (PIIODevice * d: devices) {
int ret = d->write(data); int ret = d->write(data);
PIDiagnostics * diag = parent->diags_.value(d, nullptr); if (ret > 0) {
if (diag && ret > 0) diag->sended(ret); PIDiagnostics * diag = nullptr;
__device_pool__->lock();
diag = parent->diags_.value(d, nullptr);
__device_pool__->unlock();
if (diag) diag->sended(ret);
}
} }
} }