diff --git a/osdep/LinuxEthernetTap.cpp b/osdep/LinuxEthernetTap.cpp index bda604d65..87feaca85 100644 --- a/osdep/LinuxEthernetTap.cpp +++ b/osdep/LinuxEthernetTap.cpp @@ -292,42 +292,36 @@ LinuxEthernetTap::LinuxEthernetTap( } }); - for(int k=0;k<2;++k) { - _tapProcessorThread[k] = std::thread([this] { - MAC to,from; - std::pair qi; - while (_tapq.get(qi)) { - uint8_t *const b = reinterpret_cast(qi.first); - if (b) { - to.setTo(b, 6); - from.setTo(b + 6, 6); - unsigned int etherType = Utils::ntoh(((const uint16_t *)b)[6]); - _handler(_arg, nullptr, _nwid, from, to, etherType, 0, (const void *)(b + 14),(unsigned int)(qi.second - 14)); - { - std::lock_guard l(_buffers_l); - _buffers.push_back(qi.first); - } - } else break; - } - }); - } + _tapProcessorThread = std::thread([this] { + MAC to,from; + std::pair qi; + while (_tapq.get(qi)) { + uint8_t *const b = reinterpret_cast(qi.first); + if (b) { + to.setTo(b, 6); + from.setTo(b + 6, 6); + unsigned int etherType = Utils::ntoh(((const uint16_t *)b)[6]); + _handler(_arg, nullptr, _nwid, from, to, etherType, 0, (const void *)(b + 14),(unsigned int)(qi.second - 14)); + { + std::lock_guard l(_buffers_l); + _buffers.push_back(qi.first); + } + } else break; + } + }); } LinuxEthernetTap::~LinuxEthernetTap() { (void)::write(_shutdownSignalPipe[1],"\0",1); // causes thread to exit - for(int k=0;k<64;++k) { - _tapq.post(std::pair(nullptr,0)); - } + _tapq.post(std::pair(nullptr,0)); ::close(_fd); ::close(_shutdownSignalPipe[0]); ::close(_shutdownSignalPipe[1]); _tapReaderThread.join(); - for(int k=0;k<2;++k) { - _tapProcessorThread[k].join(); - } + _tapProcessorThread.join(); for(std::vector::iterator i(_buffers.begin());i!=_buffers.end();++i) free(*i); diff --git a/osdep/LinuxEthernetTap.hpp b/osdep/LinuxEthernetTap.hpp index ffb2cc977..9e9206ead 100644 --- a/osdep/LinuxEthernetTap.hpp +++ b/osdep/LinuxEthernetTap.hpp @@ -71,7 +71,7 @@ private: int _shutdownSignalPipe[2]; std::atomic_bool _enabled; std::thread _tapReaderThread; - std::thread _tapProcessorThread[2]; + std::thread _tapProcessorThread; std::mutex _buffers_l; std::vector _buffers; BlockingQueue< std::pair > _tapq;