]> code.citadel.org Git - citadel.git/blobdiff - citadel/sysdep.c
* by counting up threads starting at 3, we seem to get what top shows in the LWPID...
[citadel.git] / citadel / sysdep.c
index d9f34470e52fb0332b409d448025b52569035f5e..a935c410b00cb38125697616b80fa8fc21467ab9 100644 (file)
@@ -49,6 +49,7 @@
 #include <errno.h>
 #include <stdarg.h>
 #include <grp.h>
+#define SHOW_ME_VAPPEND_PRINTF
 #include <libcitadel.h>
 #include "citadel.h"
 #include "server.h"
@@ -106,7 +107,6 @@ void CtdlLogPrintf(enum LogLevel loglevel, const char *format, ...) {
 
 void vCtdlLogPrintf(enum LogLevel loglevel, const char *format, va_list arg_ptr)
 {
-       char buf[SIZ], buf2[SIZ];
 
        if (enable_syslog) {
                vsyslog((syslog_facility | loglevel), format, arg_ptr);
@@ -120,30 +120,78 @@ void vCtdlLogPrintf(enum LogLevel loglevel, const char *format, va_list arg_ptr)
                struct timeval tv;
                struct tm tim;
                time_t unixtime;
+               StrBuf *lBuf;
                CitContext *CCC = CC;
+               ThreadTSD *cTSD = CTP;
+               CtdlThreadNode *node = NULL;
+               long lwpid = 0;
+
+               if (cTSD != NULL) 
+                       node = cTSD->self;
+               if ((node != NULL) && (node->reltid != 0))
+               {
+                       lwpid = node->pid + node->reltid;
+               }
 
                gettimeofday(&tv, NULL);
                /* Promote to time_t; types differ on some OSes (like darwin) */
                unixtime = tv.tv_sec;
                localtime_r(&unixtime, &tim);
-               if ((CCC != NULL) && (CCC->cs_pid != 0)) {
-                       sprintf(buf,
-                               "%04d/%02d/%02d %2d:%02d:%02d.%06ld [%3d] ",
-                               tim.tm_year + 1900, tim.tm_mon + 1,
-                               tim.tm_mday, tim.tm_hour, tim.tm_min,
-                               tim.tm_sec, (long)tv.tv_usec,
-                               CCC->cs_pid);
-               } else {
-                       sprintf(buf,
-                               "%04d/%02d/%02d %2d:%02d:%02d.%06ld ",
-                               tim.tm_year + 1900, tim.tm_mon + 1,
-                               tim.tm_mday, tim.tm_hour, tim.tm_min,
-                               tim.tm_sec, (long)tv.tv_usec);
+
+               if (CCC != NULL)
+                       lBuf = CCC->lBuf;
+               else 
+                       lBuf = NewStrBuf();
+               if (lBuf == NULL) {
+                       char buf[SIZ], buf2[SIZ];
+                       
+                       if ((CCC != NULL) && (CCC->cs_pid != 0)) {
+                               sprintf(buf,
+                                       "%04d/%02d/%02d %2d:%02d:%02d.%06ld xx [%3d] ",
+                                       tim.tm_year + 1900, tim.tm_mon + 1,
+                                       tim.tm_mday, tim.tm_hour, tim.tm_min,
+                                       tim.tm_sec, (long)tv.tv_usec,
+                                       CCC->cs_pid);
+                       } else {
+                               sprintf(buf,
+                                       "%04d/%02d/%02d %2d:%02d:%02d.%06ld xx ",
+                                       tim.tm_year + 1900, tim.tm_mon + 1,
+                                       tim.tm_mday, tim.tm_hour, tim.tm_min,
+                                       tim.tm_sec, (long)tv.tv_usec);
+                       }
+                       vsnprintf(buf2, SIZ, format, arg_ptr);   
+
+                       fprintf(stderr, "%s%s", buf, buf2);
                }
-               vsnprintf(buf2, SIZ, format, arg_ptr);   
+               else {
+                       StrBufPrintf(lBuf,
+                                    "%04d/%02d/%02d %2d:%02d:%02d.%06ld ",
+                                    tim.tm_year + 1900, tim.tm_mon + 1,
+                                    tim.tm_mday, tim.tm_hour, tim.tm_min,
+                                    tim.tm_sec, (long)tv.tv_usec);
 
-               fprintf(stderr, "%s%s", buf, buf2);
+                       
+                       if (lwpid != 0)
+                               StrBufAppendPrintf(lBuf,
+                                                  "[LWP:%d] ",
+                                                  lwpid);
+                               
+                       if (CCC != NULL) {
+                               if (CCC->cs_pid != 0)
+                                       StrBufAppendPrintf(lBuf,
+                                                          "[%3d] ",
+                                                          CCC->cs_pid);
+                               else if (CCC->user.usernum != 0)
+                                       StrBufAppendPrintf(lBuf,
+                                                          "[:%d] ",
+                                                          CCC->user.usernum);
+                       }
+                       StrBufVAppendPrintf(lBuf, format, arg_ptr);   
+                       fwrite(ChrPtr(lBuf), 1, StrLength(lBuf), stderr);
+               }
                fflush(stderr);
+               if (CCC == NULL) FreeStrBuf(&lBuf);
+
        }
 }