diff options
author | 2013-01-12 00:10:03 -0800 | |
---|---|---|
committer | 2013-01-12 00:10:03 -0800 | |
commit | 7b04566d191b27d8018fd486570a12b6f1049a16 (patch) | |
tree | e84617c937960fedab80548e83f780824d4d3eb4 /src/core/basetypes | |
parent | 739b68a69682d80d8247d4465eae7b182acc9da0 (diff) |
implemented asynchronous SMTP
Diffstat (limited to 'src/core/basetypes')
-rw-r--r-- | src/core/basetypes/MCAutoreleasePool.cc | 3 | ||||
-rw-r--r-- | src/core/basetypes/MCLog.cc | 34 |
2 files changed, 36 insertions, 1 deletions
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 <stdarg.h> +#include <string.h> #include <stdio.h> +#include <time.h> +#include <sys/time.h> +#include <pthread.h> +#include <unistd.h> 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"); } |