mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 05:16:13 +00:00
structure: Make structure abbreviations array one-time initialization threadsafe
This commit is contained in:
parent
ad230b07f6
commit
e305e49ef4
1 changed files with 7 additions and 5 deletions
|
@ -1505,10 +1505,11 @@ static GstStructureAbbreviation *
|
||||||
gst_structure_get_abbrs (gint * n_abbrs)
|
gst_structure_get_abbrs (gint * n_abbrs)
|
||||||
{
|
{
|
||||||
static GstStructureAbbreviation *abbrs = NULL;
|
static GstStructureAbbreviation *abbrs = NULL;
|
||||||
static gint num = 0;
|
static volatile gsize num = 0;
|
||||||
|
|
||||||
if (abbrs == NULL) {
|
if (g_once_init_enter (&num)) {
|
||||||
/* dynamically generate the array */
|
/* dynamically generate the array */
|
||||||
|
gsize _num;
|
||||||
GstStructureAbbreviation dyn_abbrs[] = {
|
GstStructureAbbreviation dyn_abbrs[] = {
|
||||||
{"int", G_TYPE_INT}
|
{"int", G_TYPE_INT}
|
||||||
,
|
,
|
||||||
|
@ -1548,10 +1549,11 @@ gst_structure_get_abbrs (gint * n_abbrs)
|
||||||
,
|
,
|
||||||
{"structure", GST_TYPE_STRUCTURE}
|
{"structure", GST_TYPE_STRUCTURE}
|
||||||
};
|
};
|
||||||
num = G_N_ELEMENTS (dyn_abbrs);
|
_num = G_N_ELEMENTS (dyn_abbrs);
|
||||||
/* permanently allocate and copy the array now */
|
/* permanently allocate and copy the array now */
|
||||||
abbrs = g_new0 (GstStructureAbbreviation, num);
|
abbrs = g_new0 (GstStructureAbbreviation, _num);
|
||||||
memcpy (abbrs, dyn_abbrs, sizeof (GstStructureAbbreviation) * num);
|
memcpy (abbrs, dyn_abbrs, sizeof (GstStructureAbbreviation) * _num);
|
||||||
|
g_once_init_leave (&num, _num);
|
||||||
}
|
}
|
||||||
*n_abbrs = num;
|
*n_abbrs = num;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue