diff --git a/libs/main/io_devices/piethernet.cpp b/libs/main/io_devices/piethernet.cpp index b4cc4711..060c52d5 100644 --- a/libs/main/io_devices/piethernet.cpp +++ b/libs/main/io_devices/piethernet.cpp @@ -714,10 +714,7 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) { PRIVATE->addr_.sin_len = sizeof(PRIVATE->addr_); #endif //piCout << "connect to " << path() << "..."; - bool was_block_read_flag = blockingReadFlag(); - setBlockingReadFlag(true); connected_ = (::connect(sock, (sockaddr * )&(PRIVATE->addr_), sizeof(PRIVATE->addr_)) == 0); - setBlockingReadFlag(was_block_read_flag); //piCout << "connect to " << path() << connected_; if (!connected_) piCoutObj << "Can`t connect to" << addr_r << "," << ethErrorString(); diff --git a/libs/main/io_devices/piiodevice.cpp b/libs/main/io_devices/piiodevice.cpp index dd8a7e46..32ff817f 100644 --- a/libs/main/io_devices/piiodevice.cpp +++ b/libs/main/io_devices/piiodevice.cpp @@ -341,16 +341,6 @@ PIIODevice * PIIODevice::newDeviceByPrefix(const char * prefix) { } -bool PIIODevice::blockingReadFlag() const { - return reading_now; -} - - -void PIIODevice::setBlockingReadFlag(bool yes) { - reading_now = yes; -} - - void PIIODevice::read_func() { if (!isReadable()) { read_thread.stop(); diff --git a/libs/main/io_devices/piiodevice.h b/libs/main/io_devices/piiodevice.h index 0864514a..0102af80 100644 --- a/libs/main/io_devices/piiodevice.h +++ b/libs/main/io_devices/piiodevice.h @@ -528,15 +528,15 @@ protected: virtual void threadedReadBufferSizeChanged() {;} static PIIODevice * newDeviceByPrefix(const char * prefix); - bool blockingReadFlag() const; - void setBlockingReadFlag(bool yes); - + bool isThreadedReadStopping() const {return read_thread.isStopping();} + DeviceMode mode_; DeviceOptions options_; ReadRetFunc func_read = nullptr; bool opened_ = false; void * ret_data_ = nullptr; + std::atomic_bool reading_now; private: EVENT_HANDLER(void, read_func); @@ -554,7 +554,6 @@ private: PIQueue > write_queue; ullong tri = 0; uint threaded_read_buffer_size, reopen_timeout = 1000; - std::atomic_bool reading_now; bool reopen_enabled = true; static PIMutex nfp_mutex; diff --git a/libs/main/io_devices/piserial.cpp b/libs/main/io_devices/piserial.cpp index 644c90bf..d4b8d38d 100644 --- a/libs/main/io_devices/piserial.cpp +++ b/libs/main/io_devices/piserial.cpp @@ -680,7 +680,7 @@ bool PISerial::openDevice() { bool PISerial::closeDevice() { - if (isThreadedRead()) { + if (isThreadedRead() && !isThreadedReadStopping()) { stopThreadedRead(); } if (fd != -1) {