Cleanup IDisposable support
[vlc.git] / bindings / cil / src / marshal.cs
index b68059b..2135aca 100644 (file)
@@ -50,6 +50,9 @@ namespace VideoLAN.LibVLC
             }
         }
 
+        /**
+         * Destroys an handle. Cannot fail.
+         */
         protected abstract void Destroy ();
 
         /**
@@ -80,6 +83,10 @@ namespace VideoLAN.LibVLC
             this.handle = null;
         }
 
+        /**
+         * Checks if the LibVLC run-time raised an exception
+         * If so, raises a CIL exception.
+         */
         protected void Raise ()
         {
             ex.Raise ();
@@ -90,8 +97,20 @@ namespace VideoLAN.LibVLC
          */
         public void Dispose ()
         {
-            ex.Dispose ();
-            handle.Close ();
+            Dispose (true);
+            GC.SuppressFinalize (this);
+        }
+
+        protected virtual void Dispose (bool disposing)
+        {
+            if (disposing)
+            {
+                ex.Dispose ();
+                if (handle != null)
+                    handle.Close ();
+            }
+            ex = null;
+            handle = null;
         }
     };
 };