PIEthernet atomic connected exchange
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user