aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/basetypes
diff options
context:
space:
mode:
authorGravatar DINH Viet Hoa <hoa@sprw.me>2013-01-12 00:10:03 -0800
committerGravatar DINH Viet Hoa <hoa@sprw.me>2013-01-12 00:10:03 -0800
commit7b04566d191b27d8018fd486570a12b6f1049a16 (patch)
treee84617c937960fedab80548e83f780824d4d3eb4 /src/core/basetypes
parent739b68a69682d80d8247d4465eae7b182acc9da0 (diff)
implemented asynchronous SMTP
Diffstat (limited to 'src/core/basetypes')
-rw-r--r--src/core/basetypes/MCAutoreleasePool.cc3
-rw-r--r--src/core/basetypes/MCLog.cc34
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");
}