diff --git a/node/Network.cpp b/node/Network.cpp index b3f065ced..ff1e4a01a 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 ebaa28589..6164358d4 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