summaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/components')
-rw-r--r--src/components/application_manager/include/application_manager/policies/policy_handler.h1
-rw-r--r--src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc1
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc3
-rw-r--r--src/components/application_manager/src/policies/policy_handler.cc40
-rw-r--r--src/components/include/utils/logger.h7
-rw-r--r--src/components/include/utils/push_log.h2
-rw-r--r--src/components/policy/policy_external/src/policy_manager_impl.cc18
-rw-r--r--src/components/policy/policy_regular/src/policy_manager_impl.cc19
-rw-r--r--src/components/utils/src/logger.cc5
-rw-r--r--src/components/utils/src/push_log.cc41
12 files changed, 94 insertions, 49 deletions
diff --git a/src/components/application_manager/include/application_manager/policies/policy_handler.h b/src/components/application_manager/include/application_manager/policies/policy_handler.h
index 9ca7761426..61cf2cf480 100644
--- a/src/components/application_manager/include/application_manager/policies/policy_handler.h
+++ b/src/components/application_manager/include/application_manager/policies/policy_handler.h
@@ -864,7 +864,6 @@ class PolicyHandler : public PolicyHandlerInterface,
mutable sync_primitives::RWLock policy_manager_lock_;
std::shared_ptr<PolicyManager> policy_manager_;
- void* dl_handle_;
std::shared_ptr<PolicyEventObserver> event_observer_;
uint32_t last_activated_app_id_;
diff --git a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc
index 79c6d9005e..0e739522d9 100644
--- a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc
@@ -104,4 +104,5 @@ Create() {
extern "C" __attribute__((visibility("default"))) void Delete(
application_manager::plugin_manager::RPCPlugin* data) {
delete data;
-} \ No newline at end of file
+ DELETE_THREAD_LOGGER(app_service_rpc_plugin::logger_);
+}
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
index ed6b863e20..9005eb7fd0 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
@@ -170,4 +170,5 @@ Create() {
extern "C" __attribute__((visibility("default"))) void Delete(
application_manager::plugin_manager::RPCPlugin* data) {
delete data;
+ DELETE_THREAD_LOGGER(rc_rpc_plugin::logger_);
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc
index 05ff794aee..35d3fbe2f6 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc
@@ -101,4 +101,5 @@ Create() {
extern "C" __attribute__((visibility("default"))) void Delete(
application_manager::plugin_manager::RPCPlugin* data) {
delete data;
-} \ No newline at end of file
+ DELETE_THREAD_LOGGER(sdl_rpc_plugin::logger_);
+}
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc
index aa45ee704a..4799af98b7 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc
@@ -182,4 +182,5 @@ Create() {
extern "C" __attribute__((visibility("default"))) void Delete(
application_manager::plugin_manager::RPCPlugin* data) {
delete data;
-} \ No newline at end of file
+ DELETE_THREAD_LOGGER(vehicle_info_plugin::logger_);
+}
diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc
index f88eaf47a5..8c27c44aae 100644
--- a/src/components/application_manager/src/policies/policy_handler.cc
+++ b/src/components/application_manager/src/policies/policy_handler.cc
@@ -298,7 +298,6 @@ const std::string PolicyHandler::kLibrary = "libPolicy.so";
PolicyHandler::PolicyHandler(const PolicySettings& settings,
ApplicationManager& application_manager)
: AsyncRunner("PolicyHandler async runner thread")
- , dl_handle_(0)
, last_activated_app_id_(0)
, statistic_manager_impl_(std::make_shared<StatisticManagerImpl>(this))
, settings_(settings)
@@ -325,36 +324,43 @@ bool PolicyHandler::LoadPolicyLibrary() {
policy_manager_.reset();
return false;
}
- dl_handle_ = dlopen(kLibrary.c_str(), RTLD_LAZY);
- const char* error = dlerror();
- if (!error) {
- if (CreateManager()) {
- policy_manager_->set_listener(this);
- event_observer_ =
- std::shared_ptr<PolicyEventObserver>(new PolicyEventObserver(
- this, application_manager_.event_dispatcher()));
- }
- } else {
- LOG4CXX_ERROR(logger_, error);
+ if (CreateManager()) {
+ policy_manager_->set_listener(this);
+ event_observer_ = std::shared_ptr<PolicyEventObserver>(
+ new PolicyEventObserver(this, application_manager_.event_dispatcher()));
}
return (policy_manager_.use_count() != 0);
}
bool PolicyHandler::CreateManager() {
+ void* policy_handle = dlopen(kLibrary.c_str(), RTLD_LAZY);
+ const char* error = dlerror();
+ if (error) {
+ LOG4CXX_ERROR(logger_, error);
+ return false;
+ }
+
typedef PolicyManager* (*CreateManager)();
typedef void (*DeleteManager)(PolicyManager*);
CreateManager create_manager =
- reinterpret_cast<CreateManager>(dlsym(dl_handle_, "CreateManager"));
+ reinterpret_cast<CreateManager>(dlsym(policy_handle, "CreateManager"));
DeleteManager delete_manager =
- reinterpret_cast<DeleteManager>(dlsym(dl_handle_, "DeleteManager"));
+ reinterpret_cast<DeleteManager>(dlsym(policy_handle, "DeleteManager"));
+ auto policy_destroyer = [delete_manager,
+ policy_handle](PolicyManager* policy_manager) {
+ LOG4CXX_DEBUG(logger_, "Delete Policy Manager");
+ delete_manager(policy_manager);
+ dlclose(policy_handle);
+ };
char* error_string = dlerror();
if (NULL == error_string) {
policy_manager_ =
- std::shared_ptr<PolicyManager>(create_manager(), delete_manager);
+ std::shared_ptr<PolicyManager>(create_manager(), policy_destroyer);
} else {
LOG4CXX_WARN(logger_, error_string);
+ dlclose(policy_handle);
}
return (policy_manager_.use_count() != 0);
}
@@ -1131,10 +1137,6 @@ bool PolicyHandler::UnloadPolicyLibrary() {
if (policy_manager_) {
policy_manager_.reset();
}
- if (dl_handle_) {
- ret = (dlclose(dl_handle_) == 0);
- dl_handle_ = 0;
- }
LOG4CXX_TRACE(logger_, "exit");
return ret;
}
diff --git a/src/components/include/utils/logger.h b/src/components/include/utils/logger.h
index 907f8f4db0..d492cfcb1b 100644
--- a/src/components/include/utils/logger.h
+++ b/src/components/include/utils/logger.h
@@ -65,6 +65,11 @@
void deinit_logger();
#define DEINIT_LOGGER() deinit_logger()
+// Logger thread deinitilization macro that need to stop the thread of handling
+// messages for the log4cxx
+#define DELETE_THREAD_LOGGER(logger_var) \
+ logger::delete_log_message_loop_thread(logger_var)
+
// special macros to dump logs from queue
// it's need, for example, when crash happend
#define FLUSH_LOGGER() logger::flush_logger()
@@ -141,6 +146,8 @@ log4cxx_time_t time_now();
#define DEINIT_LOGGER()
+#define DELETE_THREAD_LOGGER(logger_var)
+
#define FLUSH_LOGGER()
#define LOG4CXX_IS_TRACE_ENABLED(logger) false
diff --git a/src/components/include/utils/push_log.h b/src/components/include/utils/push_log.h
index aaeaa83bae..f6c396ae71 100644
--- a/src/components/include/utils/push_log.h
+++ b/src/components/include/utils/push_log.h
@@ -51,7 +51,7 @@ bool logs_enabled();
void set_logs_enabled(bool state);
void create_log_message_loop_thread();
-void delete_log_message_loop_thread();
+void delete_log_message_loop_thread(log4cxx::LoggerPtr& logger);
} // namespace logger
#endif // SRC_COMPONENTS_INCLUDE_UTILS_PUSH_LOG_H_
diff --git a/src/components/policy/policy_external/src/policy_manager_impl.cc b/src/components/policy/policy_external/src/policy_manager_impl.cc
index bd3c5ef658..871d34df7c 100644
--- a/src/components/policy/policy_external/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_external/src/policy_manager_impl.cc
@@ -54,14 +54,6 @@
#include "policy/access_remote_impl.h"
#include "utils/timer_task_impl.h"
-__attribute__((visibility("default"))) policy::PolicyManager* CreateManager() {
- return new policy::PolicyManagerImpl();
-}
-
-__attribute__((visibility("default"))) void DeleteManager(
- policy::PolicyManager* pm) {
- delete pm;
-}
namespace {
/**
@@ -2523,3 +2515,13 @@ const std::vector<std::string> PolicyManagerImpl::GetRPCsForFunctionGroup(
}
} // namespace policy
+
+__attribute__((visibility("default"))) policy::PolicyManager* CreateManager() {
+ return new policy::PolicyManagerImpl();
+}
+
+__attribute__((visibility("default"))) void DeleteManager(
+ policy::PolicyManager* pm) {
+ delete pm;
+ DELETE_THREAD_LOGGER(policy::logger_);
+}
diff --git a/src/components/policy/policy_regular/src/policy_manager_impl.cc b/src/components/policy/policy_regular/src/policy_manager_impl.cc
index a48fe7d197..52c5ac5706 100644
--- a/src/components/policy/policy_regular/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_regular/src/policy_manager_impl.cc
@@ -53,15 +53,6 @@
#include "policy/access_remote.h"
#include "policy/access_remote_impl.h"
-__attribute__((visibility("default"))) policy::PolicyManager* CreateManager() {
- return new policy::PolicyManagerImpl();
-}
-
-__attribute__((visibility("default"))) void DeleteManager(
- policy::PolicyManager* pm) {
- delete pm;
-}
-
namespace {
const uint32_t kDefaultRetryTimeoutInMSec =
60u * date_time::MILLISECONDS_IN_SECOND;
@@ -1814,3 +1805,13 @@ const std::vector<std::string> PolicyManagerImpl::GetRPCsForFunctionGroup(
}
} // namespace policy
+
+__attribute__((visibility("default"))) policy::PolicyManager* CreateManager() {
+ return new policy::PolicyManagerImpl();
+}
+
+__attribute__((visibility("default"))) void DeleteManager(
+ policy::PolicyManager* pm) {
+ delete pm;
+ DELETE_THREAD_LOGGER(policy::logger_);
+}
diff --git a/src/components/utils/src/logger.cc b/src/components/utils/src/logger.cc
index 2a4b8eb108..5a7922afc4 100644
--- a/src/components/utils/src/logger.cc
+++ b/src/components/utils/src/logger.cc
@@ -39,11 +39,8 @@ void deinit_logger() {
CREATE_LOGGERPTR_LOCAL(logger_, "Utils")
LOG4CXX_DEBUG(logger_, "Logger deinitialization");
logger::set_logs_enabled(false);
- if (logger::logger_status == logger::LoggerThreadCreated) {
- logger::flush_logger();
- }
- logger::delete_log_message_loop_thread();
log4cxx::LoggerPtr rootLogger = log4cxx::Logger::getRootLogger();
+ logger::delete_log_message_loop_thread(rootLogger);
log4cxx::spi::LoggerRepositoryPtr repository =
rootLogger->getLoggerRepository();
log4cxx::LoggerList loggers = repository->getCurrentLoggers();
diff --git a/src/components/utils/src/push_log.cc b/src/components/utils/src/push_log.cc
index dea0e75274..f9d1cd738a 100644
--- a/src/components/utils/src/push_log.cc
+++ b/src/components/utils/src/push_log.cc
@@ -41,7 +41,16 @@ struct __attribute__((visibility("default"))) LogsEnabled {
};
std::atomic_bool LogsEnabled::logs_enabled_(false);
-static std::unique_ptr<LogMessageLoopThread> log_message_loop_thread;
+
+template <typename T>
+using logger_ptr = std::unique_ptr<T, std::function<void(T*)> >;
+
+static logger_ptr<LogMessageLoopThread> log_message_loop_thread;
+
+auto deinit_logger = [](LogMessageLoopThread* logMsgThread) {
+ delete logMsgThread;
+ logger::logger_status = logger::LoggerThreadNotCreated;
+};
bool push_log(log4cxx::LoggerPtr logger,
log4cxx::LevelPtr level,
@@ -86,13 +95,37 @@ void set_logs_enabled(bool state) {
void create_log_message_loop_thread() {
if (!log_message_loop_thread) {
- log_message_loop_thread =
- std::unique_ptr<LogMessageLoopThread>(new LogMessageLoopThread);
+ log_message_loop_thread = logger_ptr<LogMessageLoopThread>(
+ new LogMessageLoopThread, deinit_logger);
}
}
-void delete_log_message_loop_thread() {
+void delete_log_message_loop_thread(log4cxx::LoggerPtr& logger) {
+ if (logger::logger_status == logger::LoggerThreadCreated) {
+ logger::flush_logger();
+ }
+
log_message_loop_thread.reset();
+
+ if (LOG4CXX_UNLIKELY(logger->isDebugEnabled())) {
+ ::log4cxx::helpers::MessageBuffer oss_;
+ logger->forcedLog(::log4cxx::Level::getDebug(),
+ oss_.str(oss_ << "Logger loop thread deinitialized"),
+ LOG4CXX_LOCATION);
+ }
+
+ if (logger->getRootLogger() == logger) {
+ return;
+ }
+
+ if (LOG4CXX_UNLIKELY(logger->isDebugEnabled())) {
+ ::log4cxx::helpers::MessageBuffer oss_;
+ logger->forcedLog(::log4cxx::Level::getDebug(),
+ oss_.str(oss_ << "Logger calling removeAllAppenders"),
+ LOG4CXX_LOCATION);
+ }
+
+ logger->removeAllAppenders();
}
void flush_logger() {