diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-12-21 16:15:39 -0800 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2015-12-21 16:15:39 -0800 |
| commit | 436c1fac1dc9daed033ca78719031b687b984c29 (patch) | |
| tree | 10a78810012fef7e55553867c780c5ceae99b6f8 /node/DeferredPackets.cpp | |
| parent | a4cfe4cd1650ea7e9aada0b004fd7aade2e43ced (diff) | |
| download | infinitytier-436c1fac1dc9daed033ca78719031b687b984c29.tar.gz infinitytier-436c1fac1dc9daed033ca78719031b687b984c29.zip | |
Selectively move over changes from "edge" to "dev" excluding netcon.
Diffstat (limited to 'node/DeferredPackets.cpp')
| -rw-r--r-- | node/DeferredPackets.cpp | 12 |
1 files changed, 8 insertions, 4 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; } } |
