diff options
author | Jacob Keeler <jacob.keeler@livioradio.com> | 2018-02-26 13:23:21 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-02-26 13:23:21 -0500 |
commit | 6b65db0bb49193dcdbbbd8a099520e41361a5419 (patch) | |
tree | 966ac5bea321cb85af8d6be53a92752446510ac8 | |
parent | 7d2448880702778fde64860e575e80e8ee6446c0 (diff) | |
parent | f7f80b066dd2454744b9a274885e4ea86fb47e5f (diff) | |
download | sdl_core-6b65db0bb49193dcdbbbd8a099520e41361a5419.tar.gz |
Merge pull request #2027 from smartdevicelink/fix/dbus_adapter_thread
Fix DBus build issue due to new message broker
-rw-r--r-- | src/appMain/life_cycle.cc | 13 | ||||
-rw-r--r-- | src/appMain/life_cycle.h | 4 | ||||
-rw-r--r-- | src/components/dbus/include/dbus/dbus_message_controller.h | 37 | ||||
-rw-r--r-- | src/components/dbus/src/dbus_message_controller.cc | 17 |
4 files changed, 46 insertions, 25 deletions
diff --git a/src/appMain/life_cycle.cc b/src/appMain/life_cycle.cc index 2e2126259f..d13b05ade5 100644 --- a/src/appMain/life_cycle.cc +++ b/src/appMain/life_cycle.cc @@ -202,12 +202,8 @@ bool LifeCycle::InitMessageSystem() { dbus_adapter_->SubscribeTo(); LOG4CXX_INFO(logger_, "Start DBusMessageAdapter thread!"); - dbus_adapter_thread_ = new System::Thread( - new System::ThreadArgImpl<hmi_message_handler::DBusMessageAdapter>( - *dbus_adapter_, - &hmi_message_handler::DBusMessageAdapter::MethodForReceiverThread, - NULL)); - dbus_adapter_thread_->Start(false); + dbus_adapter_thread_ = new std::thread( + &hmi_message_handler::DBusMessageAdapter::Run, dbus_adapter_); return true; } @@ -319,9 +315,12 @@ void LifeCycle::StopComponents() { if (dbus_adapter_) { DCHECK_OR_RETURN_VOID(hmi_handler_); hmi_handler_->RemoveHMIMessageAdapter(dbus_adapter_); - StopThread(dbus_adapter_thread_); + dbus_adapter_->Shutdown(); + dbus_adapter_thread_->join(); delete dbus_adapter_; dbus_adapter_ = NULL; + delete dbus_adapter_thread_; + dbus_adapter_thread_ = NULL; } #endif // DBUS_HMIADAPTER diff --git a/src/appMain/life_cycle.h b/src/appMain/life_cycle.h index f6c556e50e..db18892cd3 100644 --- a/src/appMain/life_cycle.h +++ b/src/appMain/life_cycle.h @@ -32,13 +32,13 @@ #ifndef SRC_APPMAIN_LIFE_CYCLE_H_ #define SRC_APPMAIN_LIFE_CYCLE_H_ +#include <thread> #include "utils/macro.h" #include "unistd.h" #include "config_profile/profile.h" #include "hmi_message_handler/hmi_message_handler_impl.h" #ifdef DBUS_HMIADAPTER -#include "system.h" #include "hmi_message_handler/dbus_message_adapter.h" #endif // DBUS_HMIADAPTER #if (defined(MESSAGEBROKER_HMIADAPTER) || defined(PASA_HMI)) @@ -100,7 +100,7 @@ class LifeCycle { #endif // TELEMETRY_MONITOR #ifdef DBUS_HMIADAPTER hmi_message_handler::DBusMessageAdapter* dbus_adapter_; - System::Thread* dbus_adapter_thread_; + std::thread* dbus_adapter_thread_; #endif // DBUS_HMIADAPTER #ifdef MESSAGEBROKER_HMIADAPTER diff --git a/src/components/dbus/include/dbus/dbus_message_controller.h b/src/components/dbus/include/dbus/dbus_message_controller.h index 973cc86fae..a4a3718ce3 100644 --- a/src/components/dbus/include/dbus/dbus_message_controller.h +++ b/src/components/dbus/include/dbus/dbus_message_controller.h @@ -43,11 +43,11 @@ namespace dbus { class DBusMessageController : public DBusAdapter { public: /** - * \brief constructs DBus message controller - * \param sdlServiceName name of service SDL - * \param sdlObjectPath path of object SDL - * \param hmiServiceName name of service HMI - * \param hmiObjectPath path of object HMI + * @brief constructs DBus message controller + * @param sdlServiceName name of service SDL + * @param sdlObjectPath path of object SDL + * @param hmiServiceName name of service HMI + * @param hmiObjectPath path of object HMI */ DBusMessageController(const std::string& sdlServiceName, const std::string& sdlObjectPath, @@ -55,28 +55,41 @@ class DBusMessageController : public DBusAdapter { const std::string& hmiObjectPath); /** - * \brief destructs DBus message controller + * @brief destructs DBus message controller */ virtual ~DBusMessageController(); /** - * \brief subscribes to the DBus signal. - * \param interface name of interface in HMI - * \param signal name of signal + * @brief subscribes to the DBus signal. + * @param interface name of interface in HMI + * @param signal name of signal */ void SubscribeTo(const std::string& interface, const std::string& signal); /** - * \brief Method for receiving thread. + * @brief Method for receiving thread. */ void* MethodForReceiverThread(void*); + /** + * @brief Main thread loop. + */ + bool Run(); + + /** + * @brief Signal shutdown for thread loop. + */ + void Shutdown(); + protected: /** - * \brief sends message to core - * \param obj + * @brief sends message to core + * @param obj */ virtual void SendMessageToCore(const smart_objects::SmartObject& obj) = 0; + + private: + bool shutdown_; }; } // namespace dbus diff --git a/src/components/dbus/src/dbus_message_controller.cc b/src/components/dbus/src/dbus_message_controller.cc index a8bd7a1050..59f08d6695 100644 --- a/src/components/dbus/src/dbus_message_controller.cc +++ b/src/components/dbus/src/dbus_message_controller.cc @@ -41,8 +41,8 @@ DBusMessageController::DBusMessageController(const std::string& sdlServiceName, const std::string& sdlObjectPath, const std::string& hmiServiceName, const std::string& hmiObjectPath) - : DBusAdapter( - sdlServiceName, sdlObjectPath, hmiServiceName, hmiObjectPath) {} + : DBusAdapter(sdlServiceName, sdlObjectPath, hmiServiceName, hmiObjectPath) + , shutdown_(false) {} void DBusMessageController::SubscribeTo(const std::string& interface, const std::string& signal) { @@ -67,7 +67,12 @@ void DBusMessageController::SubscribeTo(const std::string& interface, DBusMessageController::~DBusMessageController() {} void* DBusMessageController::MethodForReceiverThread(void*) { - while (true) { + Run(); + return NULL; +} + +bool DBusMessageController::Run() { + while (!shutdown_) { smart_objects::SmartObject obj(smart_objects::SmartType_Map); obj[sos::S_PARAMS][sos::S_PROTOCOL_VERSION] = 2; obj[sos::S_PARAMS][sos::S_PROTOCOL_TYPE] = 1; @@ -75,7 +80,11 @@ void* DBusMessageController::MethodForReceiverThread(void*) { SendMessageToCore(obj); } } - return NULL; + return true; +} + +void DBusMessageController::Shutdown() { + shutdown_ = true; } } // namespace dbus |