[PATCH] quartz: Fix some memory leaks (Valgrind).

Sven Baars sven.wine at gmail.com
Sat Dec 22 08:47:22 CST 2018


Signed-off-by: Sven Baars <sven.wine at gmail.com>
---
 dlls/quartz/filesource.c   | 6 +++---
 dlls/quartz/filtergraph.c  | 4 ++++
 dlls/quartz/memallocator.c | 5 ++++-
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c
index e5904dc876..df444ae40d 100644
--- a/dlls/quartz/filesource.c
+++ b/dlls/quartz/filesource.c
@@ -493,7 +493,7 @@ static ULONG WINAPI AsyncReader_Release(IBaseFilter * iface)
         }
         CoTaskMemFree(This->pszFileName);
         if (This->pmt)
-            FreeMediaType(This->pmt);
+            DeleteMediaType(This->pmt);
         BaseFilter_Destroy(&This->filter);
         CoTaskMemFree(This);
         return 0;
@@ -610,7 +610,7 @@ static HRESULT WINAPI FileSource_Load(IFileSourceFilter * iface, LPCOLESTR pszFi
     {
         CoTaskMemFree(This->pszFileName);
         if (This->pmt)
-            FreeMediaType(This->pmt);
+            DeleteMediaType(This->pmt);
 
         This->pszFileName = CoTaskMemAlloc((strlenW(pszFileName) + 1) * sizeof(WCHAR));
         strcpyW(This->pszFileName, pszFileName);
@@ -650,7 +650,7 @@ static HRESULT WINAPI FileSource_Load(IFileSourceFilter * iface, LPCOLESTR pszFi
 
         CoTaskMemFree(This->pszFileName);
         if (This->pmt)
-            FreeMediaType(This->pmt);
+            DeleteMediaType(This->pmt);
         This->pszFileName = NULL;
         This->pmt = NULL;
 
diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c
index 7abffa5045..02707b4a5d 100644
--- a/dlls/quartz/filtergraph.c
+++ b/dlls/quartz/filtergraph.c
@@ -687,6 +687,7 @@ static HRESULT WINAPI FilterGraph2_RemoveFilter(IFilterGraph2 *iface, IBaseFilte
                 IBaseFilter_SetSyncSource(pFilter, NULL);
                 IBaseFilter_Release(pFilter);
                 list_remove(&entry->entry);
+                CoTaskMemFree(entry->name);
                 heap_free(entry);
                 This->version++;
                 /* Invalidate interfaces in the cache */
@@ -1801,6 +1802,9 @@ static HRESULT WINAPI FilterGraph2_AddSourceFilter(IFilterGraph2 *iface, LPCWSTR
     TRACE("MajorType %s\n", debugstr_guid(&mt.majortype));
     TRACE("SubType %s\n", debugstr_guid(&mt.subtype));
 
+    CoTaskMemFree(filename);
+    FreeMediaType(&mt);
+
     if (ppFilter)
         *ppFilter = preader;
     IFileSourceFilter_Release(pfile);
diff --git a/dlls/quartz/memallocator.c b/dlls/quartz/memallocator.c
index f5ee3c29ef..477c63ae05 100644
--- a/dlls/quartz/memallocator.c
+++ b/dlls/quartz/memallocator.c
@@ -444,6 +444,9 @@ static HRESULT StdMediaSample2_Construct(BYTE * pbBuffer, LONG cbBuffer, IMemAll
 
 static void StdMediaSample2_Delete(StdMediaSample2 * This)
 {
+    if (This->props.pMediaType)
+        DeleteMediaType(This->props.pMediaType);
+
     /* NOTE: does not remove itself from the list it belongs to */
     CoTaskMemFree(This);
 }
@@ -676,7 +679,7 @@ static HRESULT WINAPI StdMediaSample2_SetMediaType(IMediaSample2 * iface, AM_MED
 
     if (This->props.pMediaType)
     {
-        FreeMediaType(This->props.pMediaType);
+        DeleteMediaType(This->props.pMediaType);
         This->props.pMediaType = NULL;
     }
     if (!pMediaType)
-- 
2.17.1




More information about the wine-devel mailing list