summaryrefslogtreecommitdiff
path: root/src/components/transport_manager/src/transport_manager_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/transport_manager/src/transport_manager_impl.cc')
-rw-r--r--src/components/transport_manager/src/transport_manager_impl.cc70
1 files changed, 19 insertions, 51 deletions
diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc
index 6c3edd7b91..0ee1d3304d 100644
--- a/src/components/transport_manager/src/transport_manager_impl.cc
+++ b/src/components/transport_manager/src/transport_manager_impl.cc
@@ -32,6 +32,7 @@
#include "transport_manager/transport_manager_impl.h"
+#include <pthread.h>
#include <stdint.h>
#include <cstring>
#include <queue>
@@ -69,20 +70,22 @@ TransportManagerImpl::Connection TransportManagerImpl::convert(
}
TransportManagerImpl::TransportManagerImpl()
- : is_initialized_(false),
+ : all_thread_active_(false),
+ device_listener_thread_wakeup_(),
+ is_initialized_(false),
#ifdef TIME_TESTER
metric_observer_(NULL),
#endif // TIME_TESTER
connection_id_counter_(0),
message_queue_("TM MessageQueue", this),
event_queue_("TM EventQueue", this) {
- LOG4CXX_TRACE(logger_, "TransportManager has created");
+ LOG4CXX_INFO(logger_, "==============================================");
+ pthread_cond_init(&device_listener_thread_wakeup_, NULL);
+ LOG4CXX_DEBUG(logger_, "TransportManager object created");
}
TransportManagerImpl::~TransportManagerImpl() {
LOG4CXX_DEBUG(logger_, "TransportManager object destroying");
- message_queue_.Shutdown();
- event_queue_.Shutdown();
for (std::vector<TransportAdapter*>::iterator it =
transport_adapters_.begin();
@@ -96,6 +99,7 @@ TransportManagerImpl::~TransportManagerImpl() {
delete it->second;
}
+ pthread_cond_destroy(&device_listener_thread_wakeup_);
LOG4CXX_INFO(logger_, "TransportManager object destroyed");
}
@@ -222,48 +226,18 @@ int TransportManagerImpl::AddEventListener(TransportManagerListener* listener) {
return E_SUCCESS;
}
-void TransportManagerImpl::DisconnectAllDevices() {
- LOG4CXX_AUTO_TRACE(logger_);
- for (DeviceInfoList::iterator i = device_list_.begin();
- i != device_list_.end(); ++i) {
- DeviceInfo& device = i->second;
- DisconnectDevice(device.device_handle());
- }
-}
-
-void TransportManagerImpl::TerminateAllAdapters() {
- LOG4CXX_AUTO_TRACE(logger_);
- for (std::vector<TransportAdapter*>::iterator i = transport_adapters_.begin();
- i != transport_adapters_.end(); ++i) {
- (*i)->Terminate();
- }
-}
-
-int TransportManagerImpl::InitAllAdapters() {
- LOG4CXX_AUTO_TRACE(logger_);
- for (std::vector<TransportAdapter*>::iterator i = transport_adapters_.begin();
- i != transport_adapters_.end(); ++i) {
- if ((*i)->Init() != TransportAdapter::OK) {
- return E_ADAPTERS_FAIL;
- }
- }
- return E_SUCCESS;
-}
-
int TransportManagerImpl::Stop() {
- LOG4CXX_AUTO_TRACE(logger_);
- if (!is_initialized_) {
- LOG4CXX_WARN(logger_, "TransportManager is not initialized_");
+ LOG4CXX_TRACE(logger_, "enter");
+ if (!all_thread_active_) {
+ LOG4CXX_TRACE(logger_,
+ "exit with E_TM_IS_NOT_INITIALIZED. Condition: !all_thread_active_");
return E_TM_IS_NOT_INITIALIZED;
}
+ all_thread_active_ = false;
- message_queue_.Shutdown();
- event_queue_.Shutdown();
-
- DisconnectAllDevices();
- TerminateAllAdapters();
+ pthread_cond_signal(&device_listener_thread_wakeup_);
- is_initialized_ = false;
+ LOG4CXX_TRACE(logger_, "exit with E_SUCCESS");
return E_SUCCESS;
}
@@ -416,19 +390,12 @@ int TransportManagerImpl::SearchDevices() {
int TransportManagerImpl::Init() {
LOG4CXX_TRACE(logger_, "enter");
+ all_thread_active_ = true;
is_initialized_ = true;
LOG4CXX_TRACE(logger_, "exit with E_SUCCESS");
return E_SUCCESS;
}
-int TransportManagerImpl::Reinit() {
- LOG4CXX_AUTO_TRACE(logger_);
- DisconnectAllDevices();
- TerminateAllAdapters();
- int ret = InitAllAdapters();
- return ret;
-}
-
int TransportManagerImpl::Visibility(const bool& on_off) const {
LOG4CXX_TRACE(logger_, "enter. On_off: " << &on_off);
TransportAdapter::Error ret;
@@ -511,9 +478,10 @@ void TransportManagerImpl::PostMessage(const ::protocol_handler::RawMessagePtr m
}
void TransportManagerImpl::PostEvent(const TransportAdapterEvent& event) {
- LOG4CXX_AUTO_TRACE(logger_);
- LOG4CXX_DEBUG(logger_, "TransportAdapterEvent: " << &event);
+ LOG4CXX_TRACE(logger_, "enter. TransportAdapterEvent: " << &event);
event_queue_.PostMessage(event);
+ pthread_cond_signal(&device_listener_thread_wakeup_);
+ LOG4CXX_TRACE(logger_, "exit");
}
void TransportManagerImpl::AddConnection(const ConnectionInternal& c) {