gst: don't use volatile to mean atomic
authorMatthew Waters <matthew@centricular.com>
Fri, 19 Mar 2021 06:21:01 +0000 (17:21 +1100)
committerMatthew Waters <matthew@centricular.com>
Fri, 19 Mar 2021 06:21:22 +0000 (17:21 +1100)
volatile is not sufficient to provide atomic guarantees and real atomics
should be used instead.  GCC 11 has started warning about using volatile
with atomic operations.

https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719

Discovered in https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/868

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-editing-services/-/merge_requests/234>

ges/ges-smart-video-mixer.c
ges/gstframepositioner.c
plugins/nle/nlecomposition.c
plugins/nle/nleobject.c

index 80d8934..5d2c26d 100644 (file)
@@ -124,7 +124,7 @@ static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink_%u",
 
 typedef struct _PadInfos
 {
-  volatile gint refcount;
+  gint refcount;
 
   GESSmartMixer *self;
   GstPad *mixer_pad;
@@ -149,7 +149,7 @@ static PadInfos *
 pad_infos_new (void)
 {
   PadInfos *info = g_new0 (PadInfos, 1);
-  info->refcount = 1;
+  g_atomic_int_set (&info->refcount, 1);
 
   return info;
 }
index 9255c09..4df3fdc 100644 (file)
@@ -624,7 +624,7 @@ gst_frame_positioner_get_property (GObject * object, guint property_id,
 GType
 gst_frame_positioner_meta_api_get_type (void)
 {
-  static volatile GType type;
+  static GType type;
   static const gchar *tags[] = { "video", NULL };
 
   if (g_once_init_enter (&type)) {
index da9fa93..2609540 100644 (file)
@@ -195,7 +195,7 @@ struct _NleCompositionPrivate
   gint seqnum_to_restart_task;
   gboolean waiting_serialized_query_or_buffer;
   GstEvent *stack_initialization_seek;
-  volatile gboolean stack_initialization_seek_sent;
+  gboolean stack_initialization_seek_sent;
 
   gboolean tearing_down_stack;
   gboolean suppress_child_error;
index 18133e5..e746dd1 100644 (file)
@@ -835,7 +835,7 @@ nle_object_reset (NleObject * object)
 GType
 nle_object_get_type (void)
 {
-  static volatile gsize type = 0;
+  static gsize type = 0;
 
   if (g_once_init_enter (&type)) {
     GType _type;