diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-08-21 18:07:27 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-08-21 18:07:27 -0700 |
commit | eadff71d37f57821bb68203bc79bcd44f8c85c43 (patch) | |
tree | bd95b90fef961366911c4f44e3fc0290c71ea82d | |
parent | af62a6cade200abdf5a282fb3f0ae1a9ec875dd2 (diff) | |
download | infinitytier-eadff71d37f57821bb68203bc79bcd44f8c85c43.tar.gz infinitytier-eadff71d37f57821bb68203bc79bcd44f8c85c43.zip |
Another fix to Network life cycle.
-rw-r--r-- | node/Network.cpp | 10 | ||||
-rw-r--r-- | osnet/OSXEthernetTap.cpp | 1 |
2 files changed, 9 insertions, 2 deletions
diff --git a/node/Network.cpp b/node/Network.cpp index b3f065ce..ff1e4a01 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -64,7 +64,11 @@ const char *Network::statusString(const Status s) Network::~Network() { - Thread::join(_setupThread); + _lock.lock(); + if ((_setupThread)&&(!_destroyed)) { + _lock.unlock(); + Thread::join(_setupThread); + } else _lock.unlock(); { Mutex::Lock _l(_lock); @@ -414,7 +418,9 @@ void Network::destroy() _enabled = false; _destroyed = true; - Thread::join(_setupThread); + if (_setupThread) + Thread::join(_setupThread); + _setupThread = Thread(); if (_tap) _r->tapFactory->close(_tap,true); diff --git a/osnet/OSXEthernetTap.cpp b/osnet/OSXEthernetTap.cpp index ebaa2858..6164358d 100644 --- a/osnet/OSXEthernetTap.cpp +++ b/osnet/OSXEthernetTap.cpp @@ -262,6 +262,7 @@ static inline void _intl_freeifmaddrs(struct _intl_ifmaddrs *ifmp) #include "../node/Constants.hpp" #include "../node/Utils.hpp" +#include "../node/Mutex.hpp" #include "OSXEthernetTap.hpp" // ff:ff:ff:ff:ff:ff with no ADI |