Changeset: f85ada88d853 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/f85ada88d853 Modified Files: gdk/gdk_tracer.c Branch: Jun2023 Log Message:
Lock tracer calls. diffs (78 lines): diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c --- a/gdk/gdk_tracer.c +++ b/gdk/gdk_tracer.c @@ -303,6 +303,8 @@ GDKtracer_reinit_basic(int sig) static void reinit(void) { + /* called locked */ + interrupted = 0; // GDKtracer needs to reopen the file only in @@ -310,9 +312,6 @@ reinit(void) if ((adapter_t) ATOMIC_GET(&cur_adapter) != BASIC) return; - // Make sure that GDKtracer is not trying to flush the buffer - MT_lock_set(&GDKtracer_lock); - if (active_tracer) { if (active_tracer != stderr) fclose(active_tracer); @@ -321,8 +320,6 @@ reinit(void) active_tracer = NULL; } _GDKtracer_init_basic_adptr(); - - MT_lock_unset(&GDKtracer_lock); } @@ -517,9 +514,6 @@ GDKtracer_log(const char *file, const ch static char file_prefix[] = __FILE__; static size_t prefix_length = (size_t) -1; - if (interrupted) - reinit(); - if (prefix_length == (size_t) -1) { /* first time, calculate prefix of file name */ msg = strstr(file_prefix, "gdk" DIR_SEP_STR "gdk_tracer.c"); @@ -581,6 +575,10 @@ GDKtracer_log(const char *file, const ch if ((adapter_t) ATOMIC_GET(&cur_adapter) == MBEDDED) return; + MT_lock_set(&GDKtracer_lock); + if (interrupted) + reinit(); + if (level <= M_WARNING || (ATOMIC_GET(&GDKdebug) & FORCEMITOMASK)) { fprintf(stderr, "#%s%s%s: %s: %s: %s%s%s\n", add_ts ? ts : "", @@ -588,11 +586,15 @@ GDKtracer_log(const char *file, const ch MT_thread_getname(), func, level_str[level] + 2, msg, syserr ? ": " : "", syserr ? syserr : ""); - if (active_tracer == NULL || active_tracer == stderr || !write_to_tracer) + if (active_tracer == NULL || active_tracer == stderr || !write_to_tracer) { + MT_lock_unset(&GDKtracer_lock); return; + } } - if (active_tracer == NULL) + if (active_tracer == NULL) { + MT_lock_unset(&GDKtracer_lock); return; + } if (syserr) fprintf(active_tracer, "%s: %s\n", buffer, syserr); else @@ -606,6 +608,7 @@ GDKtracer_log(const char *file, const ch // is still in the buffer which it never gets flushed. if (level == cur_flush_level || level <= M_ERROR) fflush(active_tracer); + MT_lock_unset(&GDKtracer_lock); } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org