summaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-12-21 15:23:14 -0800
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-12-21 15:23:14 -0800
commit16bc9533ed5eae9165caeca8451751562f8e15ce (patch)
tree8bed5d9529c58b46326e25d65921031f175ffbaf /node
parent63a51e2890735858a997a1d37f685ac4ad3474bf (diff)
downloadinfinitytier-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.cpp12
-rw-r--r--node/DeferredPackets.hpp3
-rw-r--r--node/RuntimeEnvironment.hpp2
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)
{
}