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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel