Maarten Lankhorst : quartz: Fix bug in memallocator with test.

Alexandre Julliard julliard at winehq.org
Tue Apr 29 08:54:36 CDT 2008


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

Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date:   Mon Apr 28 09:26:20 2008 -0700

quartz: Fix bug in memallocator with test.

---

 dlls/quartz/memallocator.c       |    6 +++---
 dlls/quartz/tests/memallocator.c |   34 +++++++++++++++++++++++++++-------
 2 files changed, 30 insertions(+), 10 deletions(-)

diff --git a/dlls/quartz/memallocator.c b/dlls/quartz/memallocator.c
index cd87a34..12effbb 100644
--- a/dlls/quartz/memallocator.c
+++ b/dlls/quartz/memallocator.c
@@ -237,13 +237,13 @@ static HRESULT WINAPI BaseMemAllocator_Commit(IMemAllocator * iface)
     {
         if (!This->pProps)
             hr = VFW_E_SIZENOTSET;
-        else if (This->bCommitted)
-            hr = S_OK;
-        else if (This->bDecommitQueued)
+        else if (This->bDecommitQueued && This->bCommitted)
         {
             This->bDecommitQueued = FALSE;
             hr = S_OK;
         }
+        else if (This->bCommitted)
+            hr = S_OK;
         else
         {
             if (!(This->hSemWaiting = CreateSemaphoreW(NULL, This->pProps->cBuffers, This->pProps->cBuffers, NULL)))
diff --git a/dlls/quartz/tests/memallocator.c b/dlls/quartz/tests/memallocator.c
index 0a01db9..b0638e8 100644
--- a/dlls/quartz/tests/memallocator.c
+++ b/dlls/quartz/tests/memallocator.c
@@ -37,13 +37,15 @@ static void CommitDecommitTest(void)
 
     if (hr == S_OK)
     {
-	ALLOCATOR_PROPERTIES RequestedProps;
-	ALLOCATOR_PROPERTIES ActualProps;
+        ALLOCATOR_PROPERTIES RequestedProps;
+        ALLOCATOR_PROPERTIES ActualProps;
 
-	RequestedProps.cBuffers = 1;
-	RequestedProps.cbBuffer = 65536;
-	RequestedProps.cbAlign = 1;
-	RequestedProps.cbPrefix = 0;
+        IMediaSample *sample = NULL, *sample2 = NULL;
+
+        RequestedProps.cBuffers = 2;
+        RequestedProps.cbBuffer = 65536;
+        RequestedProps.cbAlign = 1;
+        RequestedProps.cbPrefix = 0;
 
 	hr = IMemAllocator_SetProperties(pMemAllocator, &RequestedProps, &ActualProps);
 	ok(hr==S_OK, "SetProperties returned: %x\n", hr);
@@ -53,12 +55,30 @@ static void CommitDecommitTest(void)
 	hr = IMemAllocator_Commit(pMemAllocator);
 	ok(hr==S_OK, "Commit returned: %x\n", hr);
 
+        hr = IMemAllocator_GetBuffer(pMemAllocator, &sample, NULL, NULL, 0);
+        ok(hr==S_OK, "Could not get a buffer: %x\n", hr);
+
 	hr = IMemAllocator_Decommit(pMemAllocator);
 	ok(hr==S_OK, "Decommit returned: %x\n", hr);
 	hr = IMemAllocator_Decommit(pMemAllocator);
 	ok(hr==S_OK, "Cecommit returned: %x\n", hr);
 
-	IMemAllocator_Release(pMemAllocator);
+        /* Decommit and recommit while holding a sample */
+        if (sample)
+        {
+            hr = IMemAllocator_Commit(pMemAllocator);
+            ok(hr==S_OK, "Commit returned: %x\n", hr);
+
+            hr = IMemAllocator_GetBuffer(pMemAllocator, &sample2, NULL, NULL, 0);
+            ok(hr==S_OK, "Could not get a buffer: %x\n", hr);
+            IUnknown_Release(sample);
+            if (sample2)
+                IUnknown_Release(sample2);
+
+            hr = IMemAllocator_Decommit(pMemAllocator);
+            ok(hr==S_OK, "Cecommit returned: %x\n", hr);
+        }
+        IMemAllocator_Release(pMemAllocator);
     }
 }
 




More information about the wine-cvs mailing list