diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-12-21 15:23:14 -0800 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-12-21 15:23:14 -0800 |
commit | 16bc9533ed5eae9165caeca8451751562f8e15ce (patch) | |
tree | 8bed5d9529c58b46326e25d65921031f175ffbaf /node | |
parent | 63a51e2890735858a997a1d37f685ac4ad3474bf (diff) | |
download | infinitytier-16bc9533ed5eae9165caeca8451751562f8e15ce.tar.gz infinitytier-16bc9533ed5eae9165caeca8451751562f8e15ce.zip |
Fix a problem that made valgrind complain on shutdown (not otherwise an issue).
Diffstat (limited to 'node')
-rw-r--r-- | node/DeferredPackets.cpp | 12 | ||||
-rw-r--r-- | node/DeferredPackets.hpp | 3 | ||||
-rw-r--r-- | node/RuntimeEnvironment.hpp | 2 |
3 files changed, 11 insertions, 6 deletions
diff --git a/node/DeferredPackets.cpp b/node/DeferredPackets.cpp index 923e1339..ae19bdf1 100644 --- a/node/DeferredPackets.cpp +++ b/node/DeferredPackets.cpp @@ -37,6 +37,7 @@ DeferredPackets::DeferredPackets(const RuntimeEnvironment *renv) : RR(renv), _readPtr(0), _writePtr(0), + _waiting(0), _die(false) { } @@ -45,8 +46,11 @@ DeferredPackets::~DeferredPackets() { _q_m.lock(); _die = true; - _q_m.unlock(); - _q_s.post(); + while (_waiting > 0) { + _q_m.unlock(); + _q_s.post(); + _q_m.lock(); + } } bool DeferredPackets::enqueue(IncomingPacket *pkt) @@ -72,16 +76,16 @@ int DeferredPackets::process() _q_m.lock(); if (_die) { _q_m.unlock(); - _q_s.post(); return -1; } while (_readPtr == _writePtr) { + ++_waiting; _q_m.unlock(); _q_s.wait(); _q_m.lock(); + --_waiting; if (_die) { _q_m.unlock(); - _q_s.post(); return -1; } } diff --git a/node/DeferredPackets.hpp b/node/DeferredPackets.hpp index 1ea65f3c..87890300 100644 --- a/node/DeferredPackets.hpp +++ b/node/DeferredPackets.hpp @@ -88,7 +88,8 @@ private: const RuntimeEnvironment *const RR; unsigned long _readPtr; unsigned long _writePtr; - bool _die; + volatile int _waiting; + volatile bool _die; Mutex _q_m; BinarySemaphore _q_s; }; diff --git a/node/RuntimeEnvironment.hpp b/node/RuntimeEnvironment.hpp index 7f5d8e0c..4846c9df 100644 --- a/node/RuntimeEnvironment.hpp +++ b/node/RuntimeEnvironment.hpp @@ -66,7 +66,7 @@ public: #ifdef ZT_ENABLE_CLUSTER ,cluster((Cluster *)0) #endif - ,dpEnabled(false) + ,dpEnabled(0) { } |