Переглянути джерело

Revert "Moar threadz"

This reverts commit 101a3a7d748dcf145e819403f752c47165610f8a.
Adam Ierymenko 4 роки тому
батько
коміт
0795dbf5f1
2 змінених файлів з 20 додано та 26 видалено
  1. 19 25
      osdep/LinuxEthernetTap.cpp
  2. 1 1
      osdep/LinuxEthernetTap.hpp

+ 19 - 25
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<void *,int> qi;
-			while (_tapq.get(qi)) {
-				uint8_t *const b = reinterpret_cast<uint8_t *>(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<std::mutex> l(_buffers_l);
-						_buffers.push_back(qi.first);
-					}
-				} else break;
-			}
-		});
-	}
+	_tapProcessorThread = std::thread([this] {
+		MAC to,from;
+		std::pair<void *,int> qi;
+		while (_tapq.get(qi)) {
+			uint8_t *const b = reinterpret_cast<uint8_t *>(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<std::mutex> 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<void *,int>(nullptr,0));
-	}
+	_tapq.post(std::pair<void *,int>(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<void *>::iterator i(_buffers.begin());i!=_buffers.end();++i)
 		free(*i);

+ 1 - 1
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<void *> _buffers;
 	BlockingQueue< std::pair<void *,int> > _tapq;