From 427d6a7dca4e9960ddd3e53b5c9879aa17ced6b4 Mon Sep 17 00:00:00 2001 From: john30 Date: Sun, 22 Nov 2015 13:54:18 +0100 Subject: [PATCH] exclusively lock serial device to prevent simultaneous access, fix for closing serial device that is no tty --- src/lib/ebus/device.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib/ebus/device.cpp b/src/lib/ebus/device.cpp index f7cd7d8c..b34a316b 100644 --- a/src/lib/ebus/device.cpp +++ b/src/lib/ebus/device.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #ifdef HAVE_PPOLL @@ -214,8 +215,17 @@ result_t SerialDevice::open() // open file descriptor m_fd = ::open(m_name, O_RDWR | O_NOCTTY); - if (m_fd < 0 || isatty(m_fd) == 0) + if (m_fd < 0) return RESULT_ERR_NOTFOUND; + if (isatty(m_fd) == 0) { + close(); + return RESULT_ERR_NOTFOUND; + } + + if (flock(m_fd, LOCK_EX|LOCK_NB)) { + close(); + return RESULT_ERR_DEVICE; + } // save current settings tcgetattr(m_fd, &m_oldSettings);