Erich Hoover : quartz: Samples should be freed when IAsyncReader:: Request fails.

Alexandre Julliard julliard at winehq.org
Mon Sep 12 11:43:01 CDT 2011


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

Author: Erich Hoover <ehoover at mines.edu>
Date:   Sun Sep 11 14:10:42 2011 -0600

quartz: Samples should be freed when IAsyncReader::Request fails.

---

 dlls/quartz/mpegsplit.c |   19 ++++++++++++++-----
 1 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/dlls/quartz/mpegsplit.c b/dlls/quartz/mpegsplit.c
index c556b78..6043f69 100644
--- a/dlls/quartz/mpegsplit.c
+++ b/dlls/quartz/mpegsplit.c
@@ -217,9 +217,14 @@ static HRESULT FillBuffer(MPEGSplitterImpl *This, IMediaSample *pCurrentSample)
                 IMediaSample_SetPreroll(sample, 0);
                 IMediaSample_SetDiscontinuity(sample, 0);
                 IMediaSample_SetSyncPoint(sample, 1);
-                pin->rtCurrent = rtSampleStart;
-                pin->rtNext = rtSampleStop;
                 hr = IAsyncReader_Request(pin->pReader, sample, 0);
+                if (SUCCEEDED(hr))
+                {
+                    pin->rtCurrent = rtSampleStart;
+                    pin->rtNext = rtSampleStop;
+                }
+                else
+                    IMediaSample_Release(sample);
             }
             if (FAILED(hr))
                 FIXME("o_Ox%08x\n", hr);
@@ -754,15 +759,19 @@ static HRESULT MPEGSplitter_first_request(LPVOID iface)
 
         hr = IMediaSample_SetTime(sample, &rtSampleStart, &rtSampleStop);
 
-        pin->rtCurrent = pin->rtNext;
-        pin->rtNext = rtSampleStop;
-
         IMediaSample_SetPreroll(sample, FALSE);
         IMediaSample_SetDiscontinuity(sample, TRUE);
         IMediaSample_SetSyncPoint(sample, 1);
         This->seek = 0;
 
         hr = IAsyncReader_Request(pin->pReader, sample, 0);
+        if (SUCCEEDED(hr))
+        {
+            pin->rtCurrent = pin->rtNext;
+            pin->rtNext = rtSampleStop;
+        }
+        else
+            IMediaSample_Release(sample);
     }
     if (FAILED(hr))
         ERR("Horsemen of the apocalypse came to bring error 0x%08x\n", hr);




More information about the wine-cvs mailing list