From 16bc9533ed5eae9165caeca8451751562f8e15ce Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Mon, 21 Dec 2015 15:23:14 -0800 Subject: Fix a problem that made valgrind complain on shutdown (not otherwise an issue). --- node/DeferredPackets.cpp | 12 ++++++++---- node/DeferredPackets.hpp | 3 ++- node/RuntimeEnvironment.hpp | 2 +- 3 files changed, 11 insertions(+), 6 deletions(-) (limited to 'node') 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) { } -- cgit v1.2.3