osaf/libs/core/common/include/logtrace.h | 2 +- osaf/libs/core/common/logtrace.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-)
localtime is not thread safe and it can(has) cause crashes in services that are multi threaded. diff --git a/osaf/libs/core/common/include/logtrace.h b/osaf/libs/core/common/include/logtrace.h --- a/osaf/libs/core/common/include/logtrace.h +++ b/osaf/libs/core/common/include/logtrace.h @@ -34,7 +34,7 @@ #define LOGTRACE_H #include <syslog.h> - +#include <ncsgl_defs.h> #ifdef __cplusplus extern "C" { #endif diff --git a/osaf/libs/core/common/logtrace.c b/osaf/libs/core/common/logtrace.c --- a/osaf/libs/core/common/logtrace.c +++ b/osaf/libs/core/common/logtrace.c @@ -87,12 +87,16 @@ static void output(const char *file, uns struct timeval tv; char preamble[512]; char log_string[1024]; + struct tm *tstamp_data, tm_info; assert(priority <= LOG_DEBUG && category < CAT_MAX); /* Create a nice syslog looking date string */ gettimeofday(&tv, NULL); - strftime(log_string, sizeof(log_string), "%b %e %k:%M:%S", localtime(&tv.tv_sec)); + tstamp_data = localtime_r(&tv.tv_sec, &tm_info); + osafassert(tstamp_data); + + strftime(log_string, sizeof(log_string), "%b %e %k:%M:%S", tstamp_data); i = snprintf(preamble, sizeof(preamble), "%s.%06ld %s ", log_string, tv.tv_usec, ident); snprintf(&preamble[i], sizeof(preamble) - i, "[%d:%s:%04u] %s %s", ------------------------------------------------------------------------------ Want fast and easy access to all the code in your enterprise? Index and search up to 200,000 lines of code with a free copy of Black Duck Code Sight - the same software that powers the world's largest code search on Ohloh, the Black Duck Open Hub! Try it now. http://p.sf.net/sfu/bds _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel