Changeset: 24c82d3aebc1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=24c82d3aebc1
Modified Files:
        gdk/gdk_tracer.c
Branch: gdk_tracer
Log Message:

reduce complexity (no use of malloc/free needed)


diffs (66 lines):

diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c
--- a/gdk/gdk_tracer.c
+++ b/gdk/gdk_tracer.c
@@ -10,17 +10,6 @@
 #include "gdk.h"
 #include "gdk_tracer.h"
 
-// We need to get rid of macros defined in gdk.h. Those are using GDKtracer in 
order to produce 
-// messages. At the point malloc is called in gdk_tracer.c (in function 
_GDKtracer_fill_tracer)
-// a lock has already being acquired. Using the macro malloc in gdk.h a call 
to GDKtracer 
-// acquires another lock and results in deadlock.
-#ifdef malloc
-    #undef malloc
-#endif
-#ifdef free
-    #undef free
-#endif
-
 static gdk_tracer tracer = { .id = 0, .allocated_size = 0 };
 static gdk_tracer *active_tracer = &tracer;
 MT_Lock lock = MT_LOCK_INITIALIZER("GDKtracer_1");
@@ -126,40 +115,14 @@ static int
 static int 
 _GDKtracer_fill_tracer(gdk_tracer *sel_tracer, char *fmt, va_list va)
 {
-    char *tmp = NULL;
-    const char* msg = NULL;
     size_t fmt_len = strlen(fmt);
     int bytes_written = 0;
 
+    // vsnprintf(char *str, size_t count, ...) -> including null terminating 
character
+    bytes_written = vsnprintf(sel_tracer->buffer + sel_tracer->allocated_size, 
BUFFER_SIZE - sel_tracer->allocated_size, fmt, va);
     // Add \n if it doesn't exist
-    if(fmt[fmt_len - 1] != NEW_LINE)
-    {
-        tmp = malloc(sizeof(char) * (fmt_len + 2));
-        if(!tmp)
-        {
-            // Let GDKtracer_log to know about the failure
-            GDK_TRACER_EXCEPTION("Memory allocation failed\n");
-            return -1;
-        }
-        else
-        {
-            strcpy(tmp, fmt);
-            tmp[fmt_len] = NEW_LINE;
-            tmp[fmt_len + 1] = NULL_CHAR;
-            msg = tmp;    
-        }    
-    }
-    else
-    {
-        msg = fmt;
-    }
-        
-    if(msg)
-        // vsnprintf(char *str, size_t count, ...) -> including null 
terminating character
-        bytes_written = vsnprintf(sel_tracer->buffer + 
sel_tracer->allocated_size, BUFFER_SIZE - sel_tracer->allocated_size, msg, va);
-        
-    if(tmp)
-        free(tmp);
+    if(bytes_written && fmt[fmt_len - 1] != NEW_LINE)
+       bytes_written += snprintf(sel_tracer->buffer + 
sel_tracer->allocated_size, BUFFER_SIZE - sel_tracer->allocated_size, "\n");
 
     // Let GDKtracer_log to know about the failure
     if(bytes_written < 0)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to