From aaad3a0122213d233fe68f48025492cc50704f9c Mon Sep 17 00:00:00 2001 From: tomoaki Date: Tue, 27 Apr 2021 21:34:08 +0900 Subject: [PATCH] Bugfix of Handling Exception #236 Signed-off-by: tomoaki --- MQTTSNGateway/src/MQTTSNGWBrokerRecvTask.cpp | 4 +-- MQTTSNGateway/src/MQTTSNGWBrokerSendTask.cpp | 4 +-- MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp | 3 +- MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp | 4 +-- .../src/MQTTSNGWPacketHandleTask.cpp | 3 +- MQTTSNGateway/src/MQTTSNGWProcess.cpp | 32 +++++++------------ MQTTSNGateway/src/MQTTSNGWVersion.h | 2 +- MQTTSNGateway/src/MQTTSNGateway.cpp | 2 +- MQTTSNGateway/src/linux/Threading.cpp | 23 ++++++------- MQTTSNGateway/src/linux/Threading.h | 27 +++++++++------- MQTTSNGateway/src/mainGateway.cpp | 12 +++---- 11 files changed, 56 insertions(+), 60 deletions(-) diff --git a/MQTTSNGateway/src/MQTTSNGWBrokerRecvTask.cpp b/MQTTSNGateway/src/MQTTSNGWBrokerRecvTask.cpp index 9a570b6..4138db4 100644 --- a/MQTTSNGateway/src/MQTTSNGWBrokerRecvTask.cpp +++ b/MQTTSNGateway/src/MQTTSNGWBrokerRecvTask.cpp @@ -32,11 +32,11 @@ BrokerRecvTask::BrokerRecvTask(Gateway* gateway) _gateway = gateway; _gateway->attach((Thread*) this); _light = nullptr; + setTaskName("BrokerRecvTask"); } BrokerRecvTask::~BrokerRecvTask() { - } /** @@ -64,7 +64,7 @@ void BrokerRecvTask::run(void) _light->blueLight(false); if (CHK_SIGINT) { - WRITELOG("\n%s BrokerRecvTask stopped.", currentDateTime()); + WRITELOG("\n%s %s stopped.", currentDateTime(), getTaskName()); return; } timeout.tv_sec = 0; diff --git a/MQTTSNGateway/src/MQTTSNGWBrokerSendTask.cpp b/MQTTSNGateway/src/MQTTSNGWBrokerSendTask.cpp index ebe8a3c..4f27645 100644 --- a/MQTTSNGateway/src/MQTTSNGWBrokerSendTask.cpp +++ b/MQTTSNGateway/src/MQTTSNGWBrokerSendTask.cpp @@ -37,11 +37,11 @@ BrokerSendTask::BrokerSendTask(Gateway* gateway) _gateway->attach((Thread*) this); _gwparams = nullptr; _light = nullptr; + setTaskName("BrokerSendTask"); } BrokerSendTask::~BrokerSendTask() { -// WRITELOG("BrokerSendTask is deleted normally.\r\n"); } /** @@ -70,7 +70,7 @@ void BrokerSendTask::run() if (ev->getEventType() == EtStop) { - WRITELOG("\n%s BrokerSendTask stopped.", currentDateTime()); + WRITELOG("\n%s %s stopped.", currentDateTime(), getTaskName()); delete ev; return; } diff --git a/MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp b/MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp index 49568b5..e9720dd 100644 --- a/MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp +++ b/MQTTSNGateway/src/MQTTSNGWClientRecvTask.cpp @@ -32,6 +32,7 @@ ClientRecvTask::ClientRecvTask(Gateway* gateway) _gateway = gateway; _gateway->attach((Thread*) this); _sensorNetwork = _gateway->getSensorNetwork(); + setTaskName("ClientRecvTask"); } ClientRecvTask::~ClientRecvTask() @@ -78,7 +79,7 @@ void ClientRecvTask::run() if (CHK_SIGINT) { - WRITELOG("\n%s ClientRecvTask stopped.", currentDateTime()); + WRITELOG("\n%s %s stopped.", currentDateTime(), getTaskName()); delete packet; return; } diff --git a/MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp b/MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp index 0734a5e..2d2fa97 100644 --- a/MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp +++ b/MQTTSNGateway/src/MQTTSNGWClientSendTask.cpp @@ -31,11 +31,11 @@ ClientSendTask::ClientSendTask(Gateway* gateway) _gateway = gateway; _gateway->attach((Thread*) this); _sensorNetwork = _gateway->getSensorNetwork(); + setTaskName("ClientSendTask"); } ClientSendTask::~ClientSendTask() { -// WRITELOG("ClientSendTask is deleted normally.\r\n"); } void ClientSendTask::run() @@ -51,7 +51,7 @@ void ClientSendTask::run() if (ev->getEventType() == EtStop || _gateway->IsStopping()) { - WRITELOG("\n%s ClientSendTask stopped.", currentDateTime()); + WRITELOG("\n%s %s stopped.", currentDateTime(), getTaskName()); delete ev; break; } diff --git a/MQTTSNGateway/src/MQTTSNGWPacketHandleTask.cpp b/MQTTSNGateway/src/MQTTSNGWPacketHandleTask.cpp index c94ccb5..6540a87 100644 --- a/MQTTSNGateway/src/MQTTSNGWPacketHandleTask.cpp +++ b/MQTTSNGateway/src/MQTTSNGWPacketHandleTask.cpp @@ -54,6 +54,7 @@ PacketHandleTask::PacketHandleTask(Gateway* gateway) _mqttsnSubscribe = new MQTTSNSubscribeHandler(_gateway); _mqttsnAggrConnection = new MQTTSNAggregateConnectionHandler(_gateway); + setTaskName("PacketHandleTask"); } /** @@ -113,7 +114,7 @@ void PacketHandleTask::run() if (ev->getEventType() == EtStop) { - WRITELOG("\n%s PacketHandleTask stopped.", currentDateTime()); + WRITELOG("\n%s %s stopped.", currentDateTime(), getTaskName()); delete ev; return; } diff --git a/MQTTSNGateway/src/MQTTSNGWProcess.cpp b/MQTTSNGateway/src/MQTTSNGWProcess.cpp index 897aa29..6db7588 100644 --- a/MQTTSNGateway/src/MQTTSNGWProcess.cpp +++ b/MQTTSNGateway/src/MQTTSNGWProcess.cpp @@ -57,6 +57,8 @@ Process::Process() _configDir = CONFIG_DIRECTORY; _configFile = CONFIG_FILE; _log = 0; + _rbsem = NULL; + _rb = NULL; } Process::~Process() @@ -99,7 +101,6 @@ void Process::initialize(int argc, char** argv) else { _configFile = config.substr(pos + 1, config.size() - pos - 1); - ; _configDir = config.substr(0, pos + 1); } } @@ -278,22 +279,17 @@ void MultiTaskProcess::run(void) _threadList[i]->start(); } - try + while (true) { - while (true) + if (theProcess->checkSignal() == SIGINT ) { - if (theProcess->checkSignal() == SIGINT) - { - return; - } - sleep(1); + return; } - } catch (Exception* ex) - { - ex->writeMessage(); - } catch (...) - { - throw; + else if (_stopCount > 0) + { + throw Exception(0,"Abort",__FILE__, __func__, __LINE__); + } + sleep(1); } } @@ -334,10 +330,6 @@ int MultiTaskProcess::getParam(const char* parameter, char* value) _mutex.lock(); int rc = Process::getParam(parameter, value); _mutex.unlock(); - if (rc == -1) - { - throw Exception("No config file."); - } return rc; } @@ -348,8 +340,8 @@ Exception::Exception(const string& message) { _message = message; _exNo = 0; - _fileName = 0; - _functionName = 0; + _fileName = nullptr; + _functionName = nullptr; _line = 0; } diff --git a/MQTTSNGateway/src/MQTTSNGWVersion.h b/MQTTSNGateway/src/MQTTSNGWVersion.h index e0e6186..275be35 100644 --- a/MQTTSNGateway/src/MQTTSNGWVersion.h +++ b/MQTTSNGateway/src/MQTTSNGWVersion.h @@ -17,6 +17,6 @@ #ifndef MQTTSNGWVERSION_H_IN_ #define MQTTSNGWVERSION_H_IN_ -#define PAHO_GATEWAY_VERSION "1.5.0" +#define PAHO_GATEWAY_VERSION "1.6.0" #endif /* MQTTSNGWVERSION_H_IN_ */ diff --git a/MQTTSNGateway/src/MQTTSNGateway.cpp b/MQTTSNGateway/src/MQTTSNGateway.cpp index 83821e2..b722a56 100644 --- a/MQTTSNGateway/src/MQTTSNGateway.cpp +++ b/MQTTSNGateway/src/MQTTSNGateway.cpp @@ -315,7 +315,7 @@ void Gateway::run(void) _stopFlg = false; - /* Run Tasks until CTRL+C entred */ + /* Run Tasks until CTRL+C entered or Exception occurred */ MultiTaskProcess::run(); _stopFlg = true; diff --git a/MQTTSNGateway/src/linux/Threading.cpp b/MQTTSNGateway/src/linux/Threading.cpp index 7c452e7..d1cb5c8 100644 --- a/MQTTSNGateway/src/linux/Threading.cpp +++ b/MQTTSNGateway/src/linux/Threading.cpp @@ -135,7 +135,7 @@ void Mutex::lock(void) } } catch (char* errmsg) { - throw Exception( -1, "The same thread can't aquire a mutex twice."); + throw Exception( -1, "The same thread can't acquire a mutex twice."); } } } @@ -263,11 +263,6 @@ void NamedSemaphore::timedwait(uint16_t millsec) /*========================================= Class RingBuffer =========================================*/ -RingBuffer::RingBuffer() -{ - RingBuffer(MQTTSNGW_KEY_DIRECTORY); -} - RingBuffer::RingBuffer(const char* keyDirectory) { int fp = 0; @@ -506,6 +501,7 @@ void RingBuffer::reset() Thread::Thread() { _threadID = 0; + _taskName = nullptr; } Thread::~Thread() @@ -539,11 +535,6 @@ int Thread::start(void) return pthread_create(&_threadID, 0, _run, runnable); } -void Thread::stopProcess(void) -{ - theMultiTaskProcess->threadStopped(); -} - void Thread::stop(void) { if ( _threadID ) @@ -552,3 +543,13 @@ void Thread::stop(void) _threadID = 0; } } + +void Thread::setTaskName(const char* name) +{ + _taskName = name; +} + +const char* Thread::getTaskName(void) +{ + return _taskName; +} diff --git a/MQTTSNGateway/src/linux/Threading.h b/MQTTSNGateway/src/linux/Threading.h index 795ee5a..4dbd085 100644 --- a/MQTTSNGateway/src/linux/Threading.h +++ b/MQTTSNGateway/src/linux/Threading.h @@ -92,8 +92,7 @@ private: class RingBuffer { public: - RingBuffer(); - RingBuffer(const char* keyDirctory); + RingBuffer(const char* keyDirctory = MQTTSNGW_KEY_DIRECTORY); ~RingBuffer(); void put(char* buffer); int get(char* buffer, int bufferLength); @@ -124,15 +123,17 @@ public: #define MAGIC_WORD_FOR_THREAD \ public: void EXECRUN() \ { \ - try \ - { \ - run(); \ - stopProcess(); \ - } \ - catch(...) \ - { \ - throw; \ - } \ + try \ + { \ + run(); \ + theMultiTaskProcess->threadStopped(); \ + } \ + catch ( Exception &ex ) \ + { \ + theMultiTaskProcess->threadStopped(); \ + WRITELOG("%s catch exception\n", getTaskName()); \ + ex.writeMessage(); \ + } \ } /*===================================== @@ -146,12 +147,14 @@ public: static pthread_t getID(); static bool equals(pthread_t*, pthread_t*); virtual void initialize(int argc, char** argv); - void stopProcess(void); void waitStop(void); void stop(void); + const char* getTaskName(void); + void setTaskName(const char* name); private: static void* _run(void*); pthread_t _threadID; + const char* _taskName; }; } diff --git a/MQTTSNGateway/src/mainGateway.cpp b/MQTTSNGateway/src/mainGateway.cpp index d657deb..c0b351c 100644 --- a/MQTTSNGateway/src/mainGateway.cpp +++ b/MQTTSNGateway/src/mainGateway.cpp @@ -34,16 +34,14 @@ BrokerSendTask task5(&gateway); int main(int argc, char** argv) { - gateway.initialize(argc, argv); - gateway.run(); try { gateway.initialize(argc, argv); gateway.run(); - } catch (const std::exception &ex) - { - WRITELOG("\nEclipse Paho MQTT-SN Gateway exception: %s\n", ex.what()); - WRITELOG("MQTT-SNGateway [-f Config file name]\n"); } - return 0; + catch (Exception &ex) + { + ex.writeMessage(); + abort(); + } }