PIEthernet atomic connected exchange

This commit is contained in:
Бычков Андрей
2022-11-10 14:08:42 +03:00
parent d9eac06749
commit 16c09ae6e9

View File

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