From 3c543e79f051f9177182fd79a5af456e925c573a Mon Sep 17 00:00:00 2001 From: Ivan Pelipenko Date: Sun, 6 Dec 2020 13:09:29 +0300 Subject: [PATCH] PISerial patch - close on read error --- CMakeLists.txt | 2 +- libs/main/io_devices/piserial.cpp | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 63499225..f1273c74 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_policy(SET CMP0017 NEW) # need include() with .cmake project(pip) set(pip_MAJOR 2) set(pip_MINOR 15) -set(pip_REVISION 0) +set(pip_REVISION 1) set(pip_SUFFIX ) set(pip_COMPANY SHS) set(pip_DOMAIN org.SHS) diff --git a/libs/main/io_devices/piserial.cpp b/libs/main/io_devices/piserial.cpp index 07fdded6..203d8e2a 100644 --- a/libs/main/io_devices/piserial.cpp +++ b/libs/main/io_devices/piserial.cpp @@ -709,7 +709,16 @@ int PISerial::readDevice(void * read_to, int max_size) { return PRIVATE->readed; #else if (!canRead()) return -1; - return ::read(fd, read_to, max_size); + int ret = ::read(fd, read_to, max_size); + if (ret < 0) { + int err = errno; + if (err == EBADF || err == EFAULT || err == EINVAL || err == EIO) { + PIThread::stop(false); + close(); + return 0; + } + } + return ret; #endif }