From 5026c9450286f0921e5458818b6b93d7a5ea0d56 Mon Sep 17 00:00:00 2001 From: tomoaki Date: Wed, 26 Oct 2016 11:33:25 +0900 Subject: [PATCH] Update: Thread Termination procedure to release all pthread allocate memories. Signed-off-by: tomoaki --- MQTTSNGateway/src/MQTTSNGWProcess.cpp | 6 +++++- MQTTSNGateway/src/MQTTSNGateway.cpp | 4 ++-- MQTTSNGateway/src/MQTTSNGateway.h | 2 +- MQTTSNGateway/src/linux/Threading.cpp | 8 ++++++++ MQTTSNGateway/src/linux/Threading.h | 1 + 5 files changed, 17 insertions(+), 4 deletions(-) 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;