From 7b04566d191b27d8018fd486570a12b6f1049a16 Mon Sep 17 00:00:00 2001 From: DINH Viet Hoa Date: Sat, 12 Jan 2013 00:10:03 -0800 Subject: implemented asynchronous SMTP --- src/core/basetypes/MCAutoreleasePool.cc | 3 +++ src/core/basetypes/MCLog.cc | 34 ++++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) (limited to 'src/core/basetypes') diff --git a/src/core/basetypes/MCAutoreleasePool.cc b/src/core/basetypes/MCAutoreleasePool.cc index 7e43734f..6c38982d 100644 --- a/src/core/basetypes/MCAutoreleasePool.cc +++ b/src/core/basetypes/MCAutoreleasePool.cc @@ -54,6 +54,9 @@ void AutoreleasePool::destroyAutoreleasePoolStack(void *) { init(); carray * stack = (carray *) pthread_getspecific(autoreleasePoolStackKey); + if (stack == NULL) + return; + if (carray_count(stack) != 0) { MCLog("some autoreleasepool have not been released\n"); } diff --git a/src/core/basetypes/MCLog.cc b/src/core/basetypes/MCLog.cc index 2ceceecc..51f6d46e 100644 --- a/src/core/basetypes/MCLog.cc +++ b/src/core/basetypes/MCLog.cc @@ -1,7 +1,12 @@ #include "MCLog.h" #include +#include #include +#include +#include +#include +#include static void logInternalv(FILE * file, const char * user, const char * filename, unsigned int line, @@ -24,7 +29,34 @@ static void logInternalv(FILE * file, const char * user, const char * filename, unsigned int line, int dumpStack, const char * format, va_list argp) { - fprintf(file, "%s:%i: ", filename, line); + while (1) { + const char * p = filename; + + p = strchr(filename, '/'); + if (p == NULL) { + break; + } + filename = p + 1; + } + + struct timeval tv; + struct tm tm_value; + pthread_t thread_id = pthread_self(); + + gettimeofday(&tv, NULL); + localtime_r(&tv.tv_sec, &tm_value); + fprintf(file, "%04u-%02u-%02u %02u:%02u:%02u.%03u ", tm_value.tm_year + 1900, tm_value.tm_mon + 1, tm_value.tm_mday, tm_value.tm_hour, tm_value.tm_min, tm_value.tm_sec, tv.tv_usec / 1000); + + if (pthread_main_np()) { + fprintf(file, "[%i:main] %s:%i: ", getpid(), filename, line); + } + else { +#ifdef _MACH_PORT_T + fprintf(file, "[%i:%x] %s:%i: ", getpid(), pthread_mach_thread_np(thread_id), filename, line); +#else + fprintf(file, "[%i:%p] %s:%i: ", getpid(), (void *) thread_id, filename, line); +#endif + } vfprintf(file, format, argp); fprintf(file, "\n"); } -- cgit v1.2.3