diff --git a/libs/main/io_devices/piethernet.cpp b/libs/main/io_devices/piethernet.cpp index 17afb0ce..f38b4efc 100644 --- a/libs/main/io_devices/piethernet.cpp +++ b/libs/main/io_devices/piethernet.cpp @@ -763,8 +763,7 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) { //piCoutObj << errorString(); return -1; } - if (connected_) { - connected_ = false; + if (connected_.exchange(false)) { opened_ = false; piCoutObj << "Disconnect on read," << ethErrorString(); closeSocket(sock); @@ -856,13 +855,13 @@ ssize_t PIEthernet::writeDevice(const void * data, ssize_t max_size) { } if (!connected_) return -1; auto disconnectFunc = [this](){ - if (!connected_) return; - connected_ = false; - opened_ = false; - piCoutObj << "Disconnect on write," << ethErrorString(); - closeSocket(sock); - init(); - disconnected(true); + if (connected_.exchange(false)) { + opened_ = false; + piCoutObj << "Disconnect on write," << ethErrorString(); + closeSocket(sock); + init(); + disconnected(true); + } }; if (!isOptionSet(BlockingWrite)) { ret = ::send(sock, (const char *)data, max_size, 0);