Chris Robinson : quartz: Avoid asserting from used samples on allocator release.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 13 16:56:44 CDT 2007


Module: wine
Branch: master
Commit: 2e726e6e1120342a67ac226bec28cf7a0386d227
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2e726e6e1120342a67ac226bec28cf7a0386d227

Author: Chris Robinson <chris.kcat at gmail.com>
Date:   Tue Mar 13 10:26:48 2007 -0700

quartz: Avoid asserting from used samples on allocator release.

---

 dlls/quartz/memallocator.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/dlls/quartz/memallocator.c b/dlls/quartz/memallocator.c
index d36b83c..9167990 100644
--- a/dlls/quartz/memallocator.c
+++ b/dlls/quartz/memallocator.c
@@ -490,7 +490,10 @@ static ULONG WINAPI StdMediaSample2_Release(IMediaSample2 * iface)
 
     if (!ref)
     {
-        IMemAllocator_ReleaseBuffer(This->pParent, (IMediaSample *)iface);
+        if (This->pParent)
+            IMemAllocator_ReleaseBuffer(This->pParent, (IMediaSample *)iface);
+        else
+            StdMediaSample2_Delete(This);
         return 0;
     }
     return ref;
@@ -813,7 +816,17 @@ static HRESULT StdMemAllocator_Free(IMemAllocator * iface)
     StdMemAllocator *This = (StdMemAllocator *)iface;
     struct list * cursor;
 
-    assert(list_empty(&This->base.used_list));
+    if (!list_empty(&This->base.used_list))
+    {
+        WARN("Freeing allocator with outstanding samples!\n");
+        while ((cursor = list_head(&This->base.used_list)) != NULL)
+        {
+            StdMediaSample2 *pSample;
+            list_remove(cursor);
+            pSample = LIST_ENTRY(cursor, StdMediaSample2, listentry);
+            pSample->pParent = NULL;
+        }
+    }
 
     while ((cursor = list_head(&This->base.free_list)) != NULL)
     {




More information about the wine-cvs mailing list