diff options
Diffstat (limited to 'src/components/transport_manager/src/transport_manager_impl.cc')
-rw-r--r-- | src/components/transport_manager/src/transport_manager_impl.cc | 70 |
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) { |