diff --git a/MQTTSNGateway/src/MQTTSNGWProcess.cpp b/MQTTSNGateway/src/MQTTSNGWProcess.cpp index 18f5df3..549b439 100644 --- a/MQTTSNGateway/src/MQTTSNGWProcess.cpp +++ b/MQTTSNGateway/src/MQTTSNGWProcess.cpp @@ -255,7 +255,10 @@ MultiTaskProcess::MultiTaskProcess() MultiTaskProcess::~MultiTaskProcess() { - + for (int i = 0; i < _threadCount; i++) + { + _threadList[i]->stop(); + } } void MultiTaskProcess::initialize(int argc, char** argv) @@ -309,6 +312,7 @@ void MultiTaskProcess::threadStoped(void) _mutex.lock(); _stopCount++; _mutex.unlock(); + } void MultiTaskProcess::attach(Thread* thread) diff --git a/MQTTSNGateway/src/MQTTSNGateway.cpp b/MQTTSNGateway/src/MQTTSNGateway.cpp index d3a76e0..1065612 100644 --- a/MQTTSNGateway/src/MQTTSNGateway.cpp +++ b/MQTTSNGateway/src/MQTTSNGateway.cpp @@ -235,7 +235,7 @@ void Gateway::run(void) MultiTaskProcess::run(); - /* stop threads */ + /* stop Tasks */ Event* ev = new Event(); ev->setStop(); _packetEventQue.post(ev); @@ -246,7 +246,7 @@ void Gateway::run(void) ev->setStop(); _clientSendQue.post(ev); - /* wait until all threads stop */ + /* wait until all Task stop */ MultiTaskProcess::waitStop(); WRITELOG("\n%s MQTT-SN Gateway stoped\n\n", currentDateTime()); diff --git a/MQTTSNGateway/src/MQTTSNGateway.h b/MQTTSNGateway/src/MQTTSNGateway.h index cd742c8..86ceb76 100644 --- a/MQTTSNGateway/src/MQTTSNGateway.h +++ b/MQTTSNGateway/src/MQTTSNGateway.h @@ -25,7 +25,7 @@ namespace MQTTSNGW /*================================= * Starting prompt ==================================*/ -#define GATEWAY_VERSION " * Version: 0.9.4" +#define GATEWAY_VERSION " * Version: 0.9.5" #define PAHO_COPYRIGHT0 " * MQTT-SN Transparent Gateway" #define PAHO_COPYRIGHT1 " * Part of Project Paho in Eclipse" diff --git a/MQTTSNGateway/src/linux/Threading.cpp b/MQTTSNGateway/src/linux/Threading.cpp index a245118..c214a44 100644 --- a/MQTTSNGateway/src/linux/Threading.cpp +++ b/MQTTSNGateway/src/linux/Threading.cpp @@ -514,3 +514,11 @@ void Thread::stopProcess(void) theMultiTaskProcess->threadStoped(); } +void Thread::stop(void) +{ + if ( _threadID ) + { + pthread_join(_threadID, NULL); + _threadID = 0; + } +} diff --git a/MQTTSNGateway/src/linux/Threading.h b/MQTTSNGateway/src/linux/Threading.h index 91e7e05..df58f1c 100644 --- a/MQTTSNGateway/src/linux/Threading.h +++ b/MQTTSNGateway/src/linux/Threading.h @@ -128,6 +128,7 @@ public: virtual void initialize(int argc, char** argv); void stopProcess(void); void waitStop(void); + void stop(void); private: static void* _run(void*); pthread_t _threadID;