osaf/libs/core/mds/include/mds_log.h | 10 ++++---- osaf/libs/core/mds/mds_log.cc | 37 +++++++---------------------------- 2 files changed, 13 insertions(+), 34 deletions(-)
Remove the mutex from the MdsLog class, by allocating a temporary Buffer instance on the stack and relying on the newly implemented thread-safety in the UnixSocket class. diff --git a/osaf/libs/core/mds/include/mds_log.h b/osaf/libs/core/mds/include/mds_log.h --- a/osaf/libs/core/mds/include/mds_log.h +++ b/osaf/libs/core/mds/include/mds_log.h @@ -54,15 +54,15 @@ enum { uint32_t mds_log_init(const char *log_file_name); void log_mds_dbg(const char *fmt, ...) - __attribute__ ((format(printf, 1, 2))); + __attribute__((format(printf, 1, 2))); void log_mds_info(const char *fmt, ...) - __attribute__ ((format(printf, 1, 2))); + __attribute__((format(printf, 1, 2))); void log_mds_notify(const char *fmt, ...) - __attribute__ ((format(printf, 1, 2))); + __attribute__((format(printf, 1, 2))); void log_mds_err(const char *fmt, ...) - __attribute__ ((format(printf, 1, 2))); + __attribute__((format(printf, 1, 2))); void log_mds_critical(const char *fmt, ...) - __attribute__ ((format(printf, 1, 2))); + __attribute__((format(printf, 1, 2))); #ifdef __cplusplus } diff --git a/osaf/libs/core/mds/mds_log.cc b/osaf/libs/core/mds/mds_log.cc --- a/osaf/libs/core/mds/mds_log.cc +++ b/osaf/libs/core/mds/mds_log.cc @@ -24,10 +24,10 @@ #include "osaf/libs/core/mds/include/mds_log.h" #include <inttypes.h> -#include <pthread.h> #include <sys/time.h> #include <time.h> #include <unistd.h> +#include <atomic> #include <cstdarg> #include <cstdio> #include <cstring> @@ -51,15 +51,12 @@ class MdsLog { private: MdsLog(const char* host_name, const char* app_name, uint32_t proc_id, const char* socket_name); - ~MdsLog(); void LogInternal(base::LogMessage::Severity severity, const char *str); static MdsLog* instance_; - pthread_mutex_t mutex_; - base::LogMessage::HostName host_name_; - base::LogMessage::AppName app_name_; - base::LogMessage::ProcId proc_id_; - uint64_t msg_id_; - base::Buffer<512> buffer_; + const base::LogMessage::HostName host_name_; + const base::LogMessage::AppName app_name_; + const base::LogMessage::ProcId proc_id_; + std::atomic<uint64_t> msg_id_; base::UnixClientSocket log_socket_; DELETE_COPY_AND_MOVE_OPERATORS(MdsLog); @@ -70,27 +67,11 @@ MdsLog* MdsLog::instance_ = nullptr; MdsLog::MdsLog(const char* host_name, const char* app_name, uint32_t proc_id, const char* socket_name) : - mutex_{}, host_name_{base::LogMessage::HostName{host_name}}, app_name_{base::LogMessage::AppName{app_name}}, proc_id_{base::LogMessage::ProcId{std::to_string(proc_id)}}, msg_id_{0}, - buffer_{}, log_socket_{socket_name} { - pthread_mutexattr_t attr; - int result = pthread_mutexattr_init(&attr); - if (result != 0) osaf_abort(result); - result = pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_INHERIT); - if (result != 0) osaf_abort(result); - result = pthread_mutex_init(&mutex_, &attr); - if (result != 0) osaf_abort(result); - result = pthread_mutexattr_destroy(&attr); - if (result != 0) osaf_abort(result); -} - -MdsLog::~MdsLog() { - int result = pthread_mutex_destroy(&mutex_); - if (result != 0) osaf_abort(result); } /***************************************************** @@ -145,9 +126,8 @@ void MdsLog::Log(base::LogMessage::Sever } void MdsLog::LogInternal(base::LogMessage::Severity severity, const char *str) { - osaf_mutex_lock_ordie(&mutex_); uint64_t id = msg_id_++; - buffer_.clear(); + base::Buffer<256> buffer; base::LogMessage::Write(base::LogMessage::Facility::kLocal0, severity, base::ReadRealtimeClock(), @@ -157,9 +137,8 @@ void MdsLog::LogInternal(base::LogMessag base::LogMessage::MsgId{std::to_string(id)}, {}, str, - &buffer_); - log_socket_.Send(buffer_.data(), buffer_.size()); - osaf_mutex_unlock_ordie(&mutex_); + &buffer); + log_socket_.Send(buffer.data(), buffer.size()); } /******************************************************************************* ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today. http://sdm.link/xeonphi _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel