=?UTF-8?Q?J=C3=B6rg=20H=C3=B6hle=20?=: winecoreaudio: Release buffer memory .

Alexandre Julliard julliard at winehq.org
Fri Oct 28 12:48:37 CDT 2011


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

Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date:   Sun Aug 21 06:53:56 2011 +0200

winecoreaudio: Release buffer memory.

---

 dlls/winecoreaudio.drv/mmdevdrv.c |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/dlls/winecoreaudio.drv/mmdevdrv.c b/dlls/winecoreaudio.drv/mmdevdrv.c
index c45a8c6..79cf5e3 100644
--- a/dlls/winecoreaudio.drv/mmdevdrv.c
+++ b/dlls/winecoreaudio.drv/mmdevdrv.c
@@ -509,16 +509,27 @@ static ULONG WINAPI AudioClient_Release(IAudioClient *iface)
     ref = InterlockedDecrement(&This->ref);
     TRACE("(%p) Refcount now %u\n", This, ref);
     if(!ref){
-        IAudioClient_Stop(iface);
-        if(This->aqueue)
+        if(This->aqueue){
+            AQBuffer *buf, *next;
+            if(This->public_buffer){
+                buf = This->public_buffer->mUserData;
+                list_add_tail(&This->avail_buffers, &buf->entry);
+            }
+            IAudioClient_Stop(iface);
+            AudioQueueStop(This->aqueue, 1);
+            /* Stopped synchronously, all buffers returned. */
+            LIST_FOR_EACH_ENTRY_SAFE(buf, next, &This->avail_buffers, AQBuffer, entry){
+                AudioQueueFreeBuffer(This->aqueue, buf->buf);
+                HeapFree(GetProcessHeap(), 0, buf);
+            }
             AudioQueueDispose(This->aqueue, 1);
+        }
         if(This->session){
             EnterCriticalSection(&g_sessions_lock);
             list_remove(&This->entry);
             LeaveCriticalSection(&g_sessions_lock);
         }
         HeapFree(GetProcessHeap(), 0, This->vols);
-        HeapFree(GetProcessHeap(), 0, This->public_buffer);
         CoTaskMemFree(This->fmt);
         IMMDevice_Release(This->parent);
         HeapFree(GetProcessHeap(), 0, This);




More information about the wine-cvs mailing list