Changeset: 747cac7ae1fe for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=747cac7ae1fe
Modified Files:
        gdk/gdk_stalker.c
        gdk/gdk_stalker.h
        monetdb5/modules/mal/stalker.c
Branch: mlogger
Log Message:

Replaced pthreads with MT_*


diffs (284 lines):

diff --git a/gdk/gdk_stalker.c b/gdk/gdk_stalker.c
--- a/gdk/gdk_stalker.c
+++ b/gdk/gdk_stalker.c
@@ -19,7 +19,6 @@
  */
 
 #include <assert.h>
-#include <pthread.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -30,14 +29,10 @@
 #include "gdk.h"
 #include "gdk_stalker.h"
 
-static pthread_t flushing_thread;
-static pthread_mutex_t stalker_mutex = PTHREAD_MUTEX_INITIALIZER;
-static pthread_mutex_t secondary_stalker_mutex = PTHREAD_MUTEX_INITIALIZER;
-
 // 0 -> stalker
 // 1 -> secondary_stalker
-static gdk_stalker stalker = { .allocated_size = 0, .id = 0 };
-static gdk_stalker secondary_stalker = { .allocated_size = 0, .id = 1 };
+static gdk_stalker stalker = { .allocated_size = 0, .id = 0, .lock = 
MT_LOCK_INITIALIZER("GDKstalkerL") };
+static gdk_stalker secondary_stalker = { .allocated_size = 0, .id = 1, .lock = 
MT_LOCK_INITIALIZER("GDKstalkerL2") };
 static ATOMIC_TYPE SELECTED_STALKER_ID = 0;
 
 static bool GDK_STALKER_STOP = false;
@@ -61,7 +56,7 @@ static void
 
 // Check if log file is open
 static void 
-_GDKstalker_file_is_open(FILE file)
+_GDKstalker_file_is_open(FILE *file)
 {
     assert(file);
 }
@@ -76,7 +71,7 @@ static void
     snprintf(id, INT_MAX_LEN, "%d", file_id);
 
     char file_name[FILENAME_MAX];
-    sprintf(file_name, "%s%c%s%s%s%s", GDKgetenv("gdk_dbpath"), DIR_SEP, 
FILE_NAME, FILE_SEP, id, ".log");
+    sprintf(file_name, "%s%c%s%c%s%c%s%s", GDKgetenv("gdk_dbpath"), DIR_SEP, 
FILE_NAME, NAME_SEP, GDKstalker_timestamp(), NAME_SEP, id, ".log");
 
     output_file = fopen(file_name, "w");
 
@@ -85,7 +80,7 @@ static void
 
 
 
-// Candidate for ‘gnu_printf’ format attribute 
[-Werror=suggest-attribute=format]
+// Candidate for 'gnu_printf'’' format attribute 
[-Werror=suggest-attribute=format]
 static int 
 _GDKstalker_fill_stalker(gdk_stalker *sel_stalker, const char *fmt, va_list 
va) __attribute__ ((format (printf, 2, 0)));
 
@@ -101,15 +96,6 @@ static int
 }
 
 
-static void* 
-_GDKstalker_flush_buffer_helper(void* t)
-{
-    (void) t;
-    return (void*) GDKstalker_flush_buffer();
-}
-
-
-
 
 /**
  * 
@@ -210,22 +196,23 @@ GDKstalker_log(LOG_LEVEL level, int even
     {
         // Select a stalker
         gdk_stalker *fill_stalker;
-        pthread_mutex_t mutex;
+        MT_Lock lock;
+        int GDK_result;
         bool SWITCH_STALKER = true;
-        int bytes_written = 0;
+        int bytes_written = 0;        
 
         if((int) ATOMIC_GET(&SELECTED_STALKER_ID) == stalker.id)
         {
             fill_stalker = &stalker;
-            mutex = stalker_mutex;
+            lock = stalker.lock;
         }
         else
         {
             fill_stalker = &secondary_stalker;
-            mutex = secondary_stalker_mutex;
+            lock = secondary_stalker.lock;
         }
 
-        pthread_mutex_lock(&mutex);
+        MT_lock_set(&lock);
         {
             va_list va;
             va_start(va, fmt);
@@ -240,7 +227,7 @@ GDKstalker_log(LOG_LEVEL level, int even
                 SWITCH_STALKER = false;
             }
         }
-        pthread_mutex_unlock(&mutex);
+        MT_lock_unset(&lock);
 
         if(SWITCH_STALKER)
         {       
@@ -248,18 +235,21 @@ GDKstalker_log(LOG_LEVEL level, int even
             if((int) ATOMIC_GET(&SELECTED_STALKER_ID) == stalker.id)
             {
                 fill_stalker = &secondary_stalker;
-                mutex = secondary_stalker_mutex;
+                lock = secondary_stalker.lock;
             }
             else
             {
                 fill_stalker = &stalker;
-                mutex = stalker_mutex;
+                lock = stalker.lock;
             }
                 
-            pthread_mutex_lock(&mutex);
+            MT_lock_set(&lock);
             {
                 // Flush current stalker
-                pthread_create(&flushing_thread, NULL, 
_GDKstalker_flush_buffer_helper, NULL);
+                MT_Id tid;
+                
+                if(MT_create_thread(&tid, (void(*) (void*)) 
GDKstalker_flush_buffer, NULL, MT_THR_JOINABLE, "GDKstalkerFlush") < 0)
+                    return GDK_FAIL;
                 
                 va_list va;
                 va_start(va, fmt);
@@ -271,22 +261,21 @@ GDKstalker_log(LOG_LEVEL level, int even
                 // message might be > BUFFER_SIZE
                 fill_stalker->allocated_size += bytes_written;
 
-                void *GDK_th_result;
-                pthread_join(flushing_thread, &GDK_th_result); 
-                if(GDK_th_result == GDK_FAIL)
+                GDK_result = MT_join_thread(tid);
+                if(GDK_result == GDK_FAIL)
                     return GDK_FAIL;
 
                 // Set the new selected stalker 
                 ATOMIC_SET(&SELECTED_STALKER_ID, fill_stalker->id);
             }
-            pthread_mutex_unlock(&mutex);
+            MT_lock_unset(&lock);
         }
            
         // Flush the current buffer in case the event is 
         // important depending on the flush-level
         if(event_id >= (int) ATOMIC_GET(&CUR_FLUSH_LEVEL))
         {
-            int GDK_result = GDKstalker_flush_buffer();
+            GDK_result = GDKstalker_flush_buffer();
             if(GDK_result == GDK_FAIL)
                 return GDK_FAIL;
         }
@@ -301,16 +290,16 @@ GDKstalker_flush_buffer(void)
 {
     // Select a stalker
     gdk_stalker *fl_stalker;
-    pthread_mutex_t mutex;
+    MT_Lock lock;
     if((int) ATOMIC_GET(&SELECTED_STALKER_ID) == stalker.id)
     {
         fl_stalker = &stalker;
-        mutex = stalker_mutex;
+        lock = stalker.lock;
     }    
     else
     {
         fl_stalker = &secondary_stalker;
-        mutex = secondary_stalker_mutex;
+        lock = secondary_stalker.lock;
     }
         
     // No reason to flush a buffer with no content 
@@ -320,7 +309,7 @@ GDKstalker_flush_buffer(void)
     // Check if file is open
     _GDKstalker_file_is_open(output_file);
     
-    pthread_mutex_lock(&mutex);
+    MT_lock_set(&lock);
     {
         fwrite(&fl_stalker->buffer, fl_stalker->allocated_size, 1, 
output_file);
         fflush(output_file);
@@ -332,7 +321,7 @@ GDKstalker_flush_buffer(void)
         memset(fl_stalker->buffer, 0, BUFFER_SIZE);
         fl_stalker->allocated_size = 0;
     }
-    pthread_mutex_unlock(&mutex);
+    MT_lock_unset(&lock);
 
     // Even if the existing file is full, the logger should not create
     // a new file in case GDKstalker_stop has been called
diff --git a/gdk/gdk_stalker.h b/gdk/gdk_stalker.h
--- a/gdk/gdk_stalker.h
+++ b/gdk/gdk_stalker.h
@@ -12,8 +12,8 @@
 #define DEFAULT_LOG_LEVEL M_NONE
 #define DEFAULT_FLUSH_LEVEL M_ERROR
 
-#define FILE_NAME "merovingian"
-#define FILE_SEP "_"
+#define FILE_NAME "stalker"
+#define NAME_SEP '_'
 #define MAX_FILE_SIZE 1073741824
 
 /**
@@ -43,9 +43,10 @@ typedef enum {
 // GDKstalker Buffer
 typedef struct GDKstalker
 {
+    int id;
     char buffer[BUFFER_SIZE];
     int allocated_size;
-    int id;
+    MT_Lock lock;
 }
 gdk_stalker;
 
@@ -87,7 +88,7 @@ gdk_return GDKstalker_reset_flush_level(
 
 
 // TODO -> Write comments
-// Candidate for ‘gnu_printf’ format attribute 
[-Werror=suggest-attribute=format] 
+// Candidate for 'gnu_printf' format attribute 
[-Werror=suggest-attribute=format] 
 gdk_return GDKstalker_log(LOG_LEVEL level, int event_id, const char *fmt, ...) 
__attribute__ ((format (printf, 3, 4)));
 
 
diff --git a/monetdb5/modules/mal/stalker.c b/monetdb5/modules/mal/stalker.c
--- a/monetdb5/modules/mal/stalker.c
+++ b/monetdb5/modules/mal/stalker.c
@@ -32,11 +32,12 @@ STLKRflush_buffer(Client cntxt, MalBlkPt
 
 str
 STLKRset_log_level(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{      int *lvl;
+{      
+       int *lvl;
        (void) cntxt;
        (void) mb;
 
-       lvl = (int*) getArgReference_str(stk,pci,1);
+       lvl = (int*) getArgReference_str(stk, pci, 1);
     if( GDKstalker_set_log_level(lvl) == GDK_FAIL)
         throw(STALKER, __FILE__, "%s:%s", __func__, OPERATION_FAILED);
     return MAL_SUCCEED; 
@@ -50,6 +51,7 @@ STLKRreset_log_level(Client cntxt, MalBl
        (void) mb;
        (void) stk;
        (void) pci;
+
     if( GDKstalker_reset_log_level())
         throw(STALKER, __FILE__, "%s:%s", __func__, OPERATION_FAILED);
     return MAL_SUCCEED;
@@ -58,11 +60,12 @@ STLKRreset_log_level(Client cntxt, MalBl
 
 str
 STLKRset_flush_level(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
-{      int *lvl;
+{      
+       int *lvl;
        (void) cntxt;
        (void) mb;
 
-       lvl = (int*) getArgReference_str(stk,pci,1);
+       lvl = (int*) getArgReference_str(stk, pci, 1);
     if( GDKstalker_set_flush_level(lvl))
         throw(STALKER, __FILE__, "%s:%s", __func__, OPERATION_FAILED);
 
@@ -77,6 +80,7 @@ STLKRreset_flush_level(Client cntxt, Mal
        (void) mb;
        (void) stk;
        (void) pci;
+       
     if( GDKstalker_reset_flush_level() == GDK_FAIL)
         throw(STALKER, __FILE__, "%s:%s", __func__, OPERATION_FAILED);
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to