diff --git a/ChangeLog b/ChangeLog index 1a5edb8687..5d05019855 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2005-09-21 Francis Labonte + + Reviewed by: Tim-Philipp Müller + + * gst/gstinfo.c: (_gst_debug_nameof_funcptr), + (_gst_debug_register_funcptr): + Add mutex to serialise access to the hash table with + the function pointer => function name string mapping; + make that hash table static scope (#316809). + + * gst/registries/.cvsignore: + Remove left-over file. + 2005-09-21 Tim-Philipp Müller * docs/pwg/appendix-porting.xml: diff --git a/gst/gstinfo.c b/gst/gstinfo.c index b11be2f976..e777a293f1 100644 --- a/gst/gstinfo.c +++ b/gst/gstinfo.c @@ -1030,7 +1030,9 @@ gst_debug_get_all_categories (void) /*** FUNCTION POINTERS ********************************************************/ -GHashTable *__gst_function_pointers = NULL; +static GHashTable *__gst_function_pointers; /* NULL */ +static GStaticMutex __dbg_functions_mutex = G_STATIC_MUTEX_INIT; + const gchar * _gst_debug_nameof_funcptr (GstDebugFuncPtr ptr) G_GNUC_NO_INSTRUMENT; @@ -1045,9 +1047,12 @@ _gst_debug_nameof_funcptr (GstDebugFuncPtr ptr) Dl_info dlinfo; #endif - if (__gst_function_pointers - && (ptrname = g_hash_table_lookup (__gst_function_pointers, ptr))) { - return ptrname; + if (__gst_function_pointers) { + g_static_mutex_lock (&__dbg_functions_mutex); + ptrname = g_hash_table_lookup (__gst_function_pointers, ptr); + g_static_mutex_unlock (&__dbg_functions_mutex); + if (ptrname) + return ptrname; } /* we need to create an entry in the hash table for this one so we don't leak * the name */ @@ -1072,10 +1077,14 @@ _gst_debug_register_funcptr (GstDebugFuncPtr func, gchar * ptrname) { gpointer ptr = (gpointer) func; + g_static_mutex_lock (&__dbg_functions_mutex); + if (!__gst_function_pointers) __gst_function_pointers = g_hash_table_new (g_direct_hash, g_direct_equal); if (!g_hash_table_lookup (__gst_function_pointers, ptr)) g_hash_table_insert (__gst_function_pointers, ptr, ptrname); + + g_static_mutex_unlock (&__dbg_functions_mutex); } #ifdef HAVE_PRINTF_EXTENSION diff --git a/gst/registries/.gitignore b/gst/registries/.gitignore deleted file mode 100644 index d11415dc2c..0000000000 --- a/gst/registries/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -registrytest -*.bb -*.bbg -*.da -*.gcno