miniobject: fix sharedness check
authorWim Taymans <wim.taymans@collabora.co.uk>
Thu, 19 Jul 2012 11:35:34 +0000 (13:35 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 19 Jul 2012 11:35:34 +0000 (13:35 +0200)
gst/gstminiobject.c

index a4c42b1..14b55de 100644 (file)
@@ -69,7 +69,9 @@ G_LOCK_DEFINE_STATIC (qdata_mutex);
 static GQuark weak_ref_quark;
 
 #define SHARE_ONE (1 << 16)
+#define SHARE_TWO (2 << 16)
 #define SHARE_MASK (~(SHARE_ONE - 1))
+#define IS_SHARED(state) (state >= SHARE_TWO)
 #define LOCK_ONE (GST_LOCK_FLAG_LAST)
 #define FLAG_MASK (GST_LOCK_FLAG_LAST - 1)
 #define LOCK_MASK ((SHARE_ONE - 1) - FLAG_MASK)
@@ -191,7 +193,7 @@ gst_mini_object_lock (GstMiniObject * object, GstLockFlags flags)
 
     if (access_mode) {
       /* shared counter > 1 and write access is not allowed */
-      if (state > SHARE_ONE && access_mode & GST_LOCK_FLAG_WRITE)
+      if (access_mode & GST_LOCK_FLAG_WRITE && IS_SHARED (state))
         goto lock_failed;
 
       if ((state & LOCK_FLAG_MASK) == 0) {