From 11545bdb5d37b2df26fc5fdd00cadd05878de094 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 18 Nov 2020 22:13:06 -0500 Subject: [PATCH] Shutdown fix. --- osdep/LinuxEthernetTap.cpp | 8 ++++++-- osdep/LinuxEthernetTap.hpp | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/osdep/LinuxEthernetTap.cpp b/osdep/LinuxEthernetTap.cpp index 4659df556..ad96eb9ed 100644 --- a/osdep/LinuxEthernetTap.cpp +++ b/osdep/LinuxEthernetTap.cpp @@ -92,7 +92,8 @@ LinuxEthernetTap::LinuxEthernetTap( _homePath(homePath), _mtu(mtu), _fd(0), - _enabled(true) + _enabled(true), + _running(true) { static std::mutex s_tapCreateLock; char procpath[128],nwids[32]; @@ -267,7 +268,7 @@ LinuxEthernetTap::LinuxEthernetTap( r = 0; } - } else { + } else if ((errno != EINTR)||(!_running.load())) { r = 0; break; } @@ -297,9 +298,12 @@ LinuxEthernetTap::LinuxEthernetTap( LinuxEthernetTap::~LinuxEthernetTap() { + _running = false; + _tapq.post(std::pair(nullptr,0)); ::shutdown(_fd, SHUT_RDWR); ::close(_fd); + pthread_kill(_tapReaderThread.native_handle(), SIGUSR1); _tapReaderThread.join(); _tapProcessorThread.join(); diff --git a/osdep/LinuxEthernetTap.hpp b/osdep/LinuxEthernetTap.hpp index f296ec693..771b27980 100644 --- a/osdep/LinuxEthernetTap.hpp +++ b/osdep/LinuxEthernetTap.hpp @@ -69,6 +69,7 @@ private: unsigned int _mtu; int _fd; std::atomic_bool _enabled; + std::atomic_bool _running; std::thread _tapReaderThread; std::thread _tapProcessorThread; std::mutex _buffers_l;