From eadff71d37f57821bb68203bc79bcd44f8c85c43 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 21 Aug 2014 18:07:27 -0700 Subject: [PATCH] Another fix to Network life cycle. --- node/Network.cpp | 10 ++++++++-- osnet/OSXEthernetTap.cpp | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) 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