[vlc-devel] [PATCH 2/2] bda: RemoveFilter does an undocumented Release but does not set filter to NULL.

John Freed okvlc at johnfreed.com
Wed Mar 21 12:13:52 CET 2012


---
 modules/access/bda/bdagraph.cpp |   11 +++++------
 modules/access/dshow/dshow.cpp  |   10 +++++-----
 2 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/modules/access/bda/bdagraph.cpp b/modules/access/bda/bdagraph.cpp
index 1a19c7c..9b5bcf2 100644
--- a/modules/access/bda/bdagraph.cpp
+++ b/modules/access/bda/bdagraph.cpp
@@ -1570,7 +1570,10 @@ HRESULT BDAGraph::FindFilter( REFCLSID clsid, long* i_moniker_used,
             return S_OK;
         }
         /* Not the filter we want so unload and try the next one */
+        /* Warning: RemoveFilter does an undocumented Release()
+         * on pointer but does not set it to NULL */
         hr = p_filter_graph->RemoveFilter( l.p_filter );
+        l.p_filter = NULL;
         if( FAILED( hr ) )
         {
             msg_Warn( p_access, "FindFilter: "\
@@ -1847,32 +1850,29 @@ HRESULT BDAGraph::Destroy()
 
     if( p_transport_info )
     {
+        /* Warning: RemoveFilter does an undocumented Release()
+         * on pointer but does not set it to NULL */
         p_filter_graph->RemoveFilter( p_transport_info );
-        p_transport_info->Release();
         p_transport_info = NULL;
     }
     if( p_mpeg_demux )
     {
         p_filter_graph->RemoveFilter( p_mpeg_demux );
-        p_mpeg_demux->Release();
         p_mpeg_demux = NULL;
     }
     if( p_sample_grabber )
     {
         p_filter_graph->RemoveFilter( p_sample_grabber );
-        p_sample_grabber->Release();
         p_sample_grabber = NULL;
     }
     if( p_capture_device )
     {
         p_filter_graph->RemoveFilter( p_capture_device );
-        p_capture_device->Release();
         p_capture_device = NULL;
     }
     if( p_tuner_device )
     {
         p_filter_graph->RemoveFilter( p_tuner_device );
-        p_tuner_device->Release();
         p_tuner_device = NULL;
     }
     if( p_scanning_tuner )
@@ -1883,7 +1883,6 @@ HRESULT BDAGraph::Destroy()
     if( p_network_provider )
     {
         p_filter_graph->RemoveFilter( p_network_provider );
-        p_network_provider->Release();
         p_network_provider = NULL;
     }
 
diff --git a/modules/access/dshow/dshow.cpp b/modules/access/dshow/dshow.cpp
index a85ab5e..c6e8916 100644
--- a/modules/access/dshow/dshow.cpp
+++ b/modules/access/dshow/dshow.cpp
@@ -331,8 +331,8 @@ static void DeleteDirectShowGraph( access_sys_t *p_sys )
     {
         p_sys->p_graph->RemoveFilter( p_sys->pp_streams[i]->p_capture_filter );
         p_sys->p_graph->RemoveFilter( p_sys->pp_streams[i]->p_device_filter );
-        p_sys->pp_streams[i]->p_capture_filter->Release();
-        p_sys->pp_streams[i]->p_device_filter->Release();
+        p_sys->pp_streams[i]->p_capture_filter = NULL;
+        p_sys->pp_streams[i]->p_device_filter = NULL;
     }
 
     /* Release directshow objects */
@@ -1148,9 +1148,9 @@ static int OpenDevice( vlc_object_t *p_this, access_sys_t *p_sys,
     p_sys->p_graph->RemoveFilter( p_device_filter );
     p_sys->p_graph->RemoveFilter( p_capture_filter );
 
-    /* Release objects */
-    p_device_filter->Release();
-    p_capture_filter->Release();
+    /* Nullify objects */
+    p_device_filter = NULL;
+    p_capture_filter = NULL;
 
     return VLC_EGENERIC;
 }
-- 
1.7.7.6




More information about the vlc-devel mailing list