From 4cecd73c93b0728cd0e4980ed8d0940c93f9129e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim-Philipp=20M=C3=BCller?= Date: Mon, 26 Jul 2010 18:53:57 +0200 Subject: [PATCH] info: flush again after every line of debug output g_printerr() used to do this for us. Also use libc's fprintf() functions, to make sure the stderr pointer we use is actually compatible with the libc linked against by GStreamer (which apparently may not always be the same as what GLib is linked against on windows), and we don't need the functionality ensured by g_fprintf(). Fixes #625295. --- gst/gstinfo.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/gst/gstinfo.c b/gst/gstinfo.c index b7a420d..d84b662 100644 --- a/gst/gstinfo.c +++ b/gst/gstinfo.c @@ -938,11 +938,12 @@ gst_debug_log_default (GstDebugCategory * category, GstDebugLevel level, levelcolor = levelcolormap[level]; #define PRINT_FMT " %s"PID_FMT"%s "PTR_FMT" %s%s%s %s"CAT_FMT"%s %s\n" - g_fprintf (log_file, "%" GST_TIME_FORMAT PRINT_FMT, GST_TIME_ARGS (elapsed), + fprintf (log_file, "%" GST_TIME_FORMAT PRINT_FMT, GST_TIME_ARGS (elapsed), pidcolor, pid, clear, g_thread_self (), levelcolor, gst_debug_level_get_name (level), clear, color, gst_debug_category_get_name (category), file, line, function, obj, clear, gst_debug_message_get (message)); + fflush (log_file); #undef PRINT_FMT g_free (color); #else @@ -951,37 +952,46 @@ gst_debug_log_default (GstDebugCategory * category, GstDebugLevel level, * thing. */ static GStaticMutex win_print_mutex = G_STATIC_MUTEX_INIT; const gint clear = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; -#define SET_COLOR(c) \ - SetConsoleTextAttribute (GetStdHandle (STD_ERROR_HANDLE), (c)); +#define SET_COLOR(c) G_STMT_START { \ + if (log_file == stderr) { \ + SetConsoleTextAttribute (GetStdHandle (STD_ERROR_HANDLE), (c)); \ + } G_STMT_END g_static_mutex_lock (&win_print_mutex); /* timestamp */ - g_fprintf (log_file, "%" GST_TIME_FORMAT " ", GST_TIME_ARGS (elapsed)); + fprintf (log_file, "%" GST_TIME_FORMAT " ", GST_TIME_ARGS (elapsed)); + fflush (log_file); /* pid */ SET_COLOR (available_colors[pid % G_N_ELEMENTS (available_colors)]); - g_fprintf (log_file, PID_FMT, pid); + fprintf (log_file, PID_FMT, pid); + fflush (log_file); /* thread */ SET_COLOR (clear); - g_fprintf (log_file, " " PTR_FMT " ", g_thread_self ()); + fprintf (log_file, " " PTR_FMT " ", g_thread_self ()); + fflush (log_file); /* level */ SET_COLOR (levelcolormap[level]); - g_fprintf (log_file, "%s ", gst_debug_level_get_name (level)); + fprintf (log_file, "%s ", gst_debug_level_get_name (level)); + fflush (log_file); /* category */ SET_COLOR (gst_debug_construct_win_color (gst_debug_category_get_color (category))); - g_fprintf (log_file, CAT_FMT, gst_debug_category_get_name (category), + fprintf (log_file, CAT_FMT, gst_debug_category_get_name (category), file, line, function, obj); + fflush (log_file); /* message */ SET_COLOR (clear); - g_fprintf (log_file, " %s\n", gst_debug_message_get (message)); + fprintf (log_file, " %s\n", gst_debug_message_get (message)); + fflush (log_file); g_static_mutex_unlock (&win_print_mutex); #endif } else { /* no color, all platforms */ #define PRINT_FMT " "PID_FMT" "PTR_FMT" %s "CAT_FMT" %s\n" - g_fprintf (log_file, "%" GST_TIME_FORMAT PRINT_FMT, GST_TIME_ARGS (elapsed), + fprintf (log_file, "%" GST_TIME_FORMAT PRINT_FMT, GST_TIME_ARGS (elapsed), pid, g_thread_self (), gst_debug_level_get_name (level), gst_debug_category_get_name (category), file, line, function, obj, gst_debug_message_get (message)); + fflush (log_file); #undef PRINT_FMT } -- 2.7.4