mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-05 09:00:54 +00:00
gst: Protect initialization state with a recursive mutex.
Otherwise a gst_init() call from a plugin would deadlock if the plugin is loaded as part of registry updating. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/940 Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2858>
This commit is contained in:
parent
d80589592d
commit
3aafef7955
1 changed files with 7 additions and 8 deletions
|
@ -131,7 +131,7 @@
|
|||
|
||||
static gboolean gst_initialized = FALSE;
|
||||
static gboolean gst_deinitialized = FALSE;
|
||||
static GMutex init_lock;
|
||||
static GRecMutex init_lock;
|
||||
|
||||
GstClockTime _priv_gst_start_time;
|
||||
|
||||
|
@ -415,11 +415,10 @@ gst_init_check (int *argc, char **argv[], GError ** error)
|
|||
#endif
|
||||
gboolean res;
|
||||
|
||||
g_mutex_lock (&init_lock);
|
||||
|
||||
g_rec_mutex_lock (&init_lock);
|
||||
if (gst_initialized) {
|
||||
GST_DEBUG ("already initialized gst");
|
||||
g_mutex_unlock (&init_lock);
|
||||
g_rec_mutex_unlock (&init_lock);
|
||||
return TRUE;
|
||||
}
|
||||
#ifndef GST_DISABLE_OPTION_PARSING
|
||||
|
@ -438,7 +437,7 @@ gst_init_check (int *argc, char **argv[], GError ** error)
|
|||
|
||||
gst_initialized = res;
|
||||
|
||||
g_mutex_unlock (&init_lock);
|
||||
g_rec_mutex_unlock (&init_lock);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -1104,10 +1103,10 @@ gst_deinit (void)
|
|||
{
|
||||
GstBinClass *bin_class;
|
||||
|
||||
g_mutex_lock (&init_lock);
|
||||
g_rec_mutex_lock (&init_lock);
|
||||
|
||||
if (!gst_initialized) {
|
||||
g_mutex_unlock (&init_lock);
|
||||
g_rec_mutex_unlock (&init_lock);
|
||||
return;
|
||||
}
|
||||
if (gst_deinitialized) {
|
||||
|
@ -1260,7 +1259,7 @@ gst_deinit (void)
|
|||
|
||||
gst_deinitialized = TRUE;
|
||||
GST_INFO ("deinitialized GStreamer");
|
||||
g_mutex_unlock (&init_lock);
|
||||
g_rec_mutex_unlock (&init_lock);
|
||||
|
||||
#ifndef GST_DISABLE_GST_DEBUG
|
||||
/* Doing this as the very last step to allow the above GST_INFO() to work
|
||||
|
|
Loading…
Reference in a new issue