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();
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);