Ref/unref the Src field of Gst.Event/Message when setting it
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 23 Apr 2009 12:39:50 +0000 (14:39 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Thu, 23 Apr 2009 12:39:50 +0000 (14:39 +0200)
gstreamer-sharp/Event.custom
gstreamer-sharp/Message.custom

index 0233314..704fbf4 100644 (file)
@@ -27,6 +27,12 @@ public ulong Timestamp {
 [DllImport ("gstreamersharpglue-0.10") ]
 extern static uint gstsharp_gst_event_get_src_offset ();
 
+[DllImport ("gobject-2.0.dll")]
+extern static IntPtr g_object_ref (IntPtr handle);
+
+[DllImport ("gobject-2.0.dll")]
+extern static void g_object_unref (IntPtr handle);
+
 static uint src_offset = gstsharp_gst_event_get_src_offset ();
 public Gst.Object Src {
   get {
@@ -39,9 +45,12 @@ public Gst.Object Src {
     if (!IsWritable)
       throw new ApplicationException ();
 
+    if (Src != null)
+      g_object_unref (Src.Handle);
+
     unsafe {
       IntPtr* raw_ptr = (IntPtr*) ( ( (byte*) Handle) + src_offset);
-      *raw_ptr = value == null ? IntPtr.Zero : value.Handle;
+      *raw_ptr = value == null ? IntPtr.Zero : g_object_ref (value.Handle);
     }
   }
 }
index d48f813..c0b21d0 100644 (file)
@@ -27,6 +27,12 @@ public ulong Timestamp {
 [DllImport ("gstreamersharpglue-0.10") ]
 extern static uint gstsharp_gst_message_get_src_offset ();
 
+[DllImport ("gobject-2.0.dll")]
+extern static IntPtr g_object_ref (IntPtr handle);
+
+[DllImport ("gobject-2.0.dll")]
+extern static void g_object_unref (IntPtr handle);
+
 static uint src_offset = gstsharp_gst_message_get_src_offset ();
 public Gst.Object Src {
   get {
@@ -39,9 +45,12 @@ public Gst.Object Src {
     if (!IsWritable)
       throw new ApplicationException ();
 
+    if (Src != null)
+      g_object_unref (Src.Handle);
+
     unsafe {
       IntPtr* raw_ptr = (IntPtr*) ( ( (byte*) Handle) + src_offset);
-      *raw_ptr = value == null ? IntPtr.Zero : value.Handle;
+      *raw_ptr = value == null ? IntPtr.Zero : g_object_ref (value.Handle);
     }
   }
 }