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