Module: wine Branch: master Commit: 2e726e6e1120342a67ac226bec28cf7a0386d227 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2e726e6e1120342a67ac226bec...
Author: Chris Robinson chris.kcat@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) {