summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2005-09-21 21:36:00 +0000
committerTim-Philipp Müller <tim@centricular.net>2005-09-21 21:36:00 +0000
commit66ce301647e1cfb167545b68bdd835dd1e23cba6 (patch)
treefcd6245df46971f343c4bcc739fff86679400243
parenta07f338da828b882c3776cd76d364fd6ecd6fc5b (diff)
downloadgstreamer-66ce301647e1cfb167545b68bdd835dd1e23cba6.tar.gz
gst/gstinfo.c: Add mutex to serialise access to the hash table with the function pointer => function name string mapp...
Original commit message from CVS: Reviewed by: Tim-Philipp Müller <tim at centricular dot net> * 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).
-rw-r--r--ChangeLog17
-rw-r--r--gst/gstinfo.c17
2 files changed, 27 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index a44d8204f5..26efcbf07f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,19 @@
-2005-09-13 Steve Lhomme <steve.lhomme@free.fr>
+2005-09-21 Francis Labonte <francis_labonte at hotmail dot com>
+
+ Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
+
+ * 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).
+
+2005-09-13 Steve Lhomme <steve.lhomme@free.fr>
+
* win32/config.h:
- update some defines for cleaner and better compilation
+ update some defines for cleaner and better compilation
* win32/gst-typefind.vcproj:
- added gst-typefind to the MSVC7 build
+ added gst-typefind to the MSVC7 build
2005-09-13 Julien MOUTTE <julien@moutte.net>
diff --git a/gst/gstinfo.c b/gst/gstinfo.c
index 36ebbd8181..c158f1b9cf 100644
--- a/gst/gstinfo.c
+++ b/gst/gstinfo.c
@@ -1038,7 +1038,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 (void *ptr)
G_GNUC_NO_INSTRUMENT;
@@ -1052,9 +1054,12 @@ _gst_debug_nameof_funcptr (void *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 */
@@ -1077,11 +1082,15 @@ _gst_debug_nameof_funcptr (void *ptr)
void *
_gst_debug_register_funcptr (void *ptr, gchar * ptrname)
{
+ 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);
+
return ptr;
}