mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-06 12:33:44 +02:00
parent
101a3a7d74
commit
0795dbf5f1
2 changed files with 20 additions and 26 deletions
|
@ -292,8 +292,7 @@ LinuxEthernetTap::LinuxEthernetTap(
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
for(int k=0;k<2;++k) {
|
_tapProcessorThread = std::thread([this] {
|
||||||
_tapProcessorThread[k] = std::thread([this] {
|
|
||||||
MAC to,from;
|
MAC to,from;
|
||||||
std::pair<void *,int> qi;
|
std::pair<void *,int> qi;
|
||||||
while (_tapq.get(qi)) {
|
while (_tapq.get(qi)) {
|
||||||
|
@ -310,24 +309,19 @@ LinuxEthernetTap::LinuxEthernetTap(
|
||||||
} else break;
|
} else break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LinuxEthernetTap::~LinuxEthernetTap()
|
LinuxEthernetTap::~LinuxEthernetTap()
|
||||||
{
|
{
|
||||||
(void)::write(_shutdownSignalPipe[1],"\0",1); // causes thread to exit
|
(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(_fd);
|
||||||
::close(_shutdownSignalPipe[0]);
|
::close(_shutdownSignalPipe[0]);
|
||||||
::close(_shutdownSignalPipe[1]);
|
::close(_shutdownSignalPipe[1]);
|
||||||
|
|
||||||
_tapReaderThread.join();
|
_tapReaderThread.join();
|
||||||
for(int k=0;k<2;++k) {
|
_tapProcessorThread.join();
|
||||||
_tapProcessorThread[k].join();
|
|
||||||
}
|
|
||||||
|
|
||||||
for(std::vector<void *>::iterator i(_buffers.begin());i!=_buffers.end();++i)
|
for(std::vector<void *>::iterator i(_buffers.begin());i!=_buffers.end();++i)
|
||||||
free(*i);
|
free(*i);
|
||||||
|
|
|
@ -71,7 +71,7 @@ private:
|
||||||
int _shutdownSignalPipe[2];
|
int _shutdownSignalPipe[2];
|
||||||
std::atomic_bool _enabled;
|
std::atomic_bool _enabled;
|
||||||
std::thread _tapReaderThread;
|
std::thread _tapReaderThread;
|
||||||
std::thread _tapProcessorThread[2];
|
std::thread _tapProcessorThread;
|
||||||
std::mutex _buffers_l;
|
std::mutex _buffers_l;
|
||||||
std::vector<void *> _buffers;
|
std::vector<void *> _buffers;
|
||||||
BlockingQueue< std::pair<void *,int> > _tapq;
|
BlockingQueue< std::pair<void *,int> > _tapq;
|
||||||
|
|
Loading…
Add table
Reference in a new issue