Jörg Höhle : winealsa: Favour HeapAlloc() over malloc().

Alexandre Julliard julliard at winehq.org
Tue Mar 15 11:33:59 CDT 2011


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

Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date:   Wed Mar  9 02:23:10 2011 +0100

winealsa: Favour HeapAlloc() over malloc().

---

 dlls/winealsa.drv/wavein.c  |   22 +++++++++++-----------
 dlls/winealsa.drv/waveout.c |   32 +++++++++++++-------------------
 2 files changed, 24 insertions(+), 30 deletions(-)

diff --git a/dlls/winealsa.drv/wavein.c b/dlls/winealsa.drv/wavein.c
index 2075805..32442fa 100644
--- a/dlls/winealsa.drv/wavein.c
+++ b/dlls/winealsa.drv/wavein.c
@@ -369,7 +369,6 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
         return MMSYSERR_ALLOCATED;
     }
 
-    wwi->pcm = 0;
     flags = SND_PCM_NONBLOCK;
 
     if ( (err=snd_pcm_open(&pcm, wwi->pcmname, SND_PCM_STREAM_CAPTURE, flags)) < 0 )
@@ -393,7 +392,11 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
 
     hw_params = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, snd_pcm_hw_params_sizeof() );
     sw_params = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, snd_pcm_sw_params_sizeof() );
-
+    if (!hw_params || !sw_params)
+    {
+        ret = MMSYSERR_NOMEM;
+        goto error;
+    }
     snd_pcm_hw_params_any(pcm, hw_params);
 
 #define EXIT_ON_ERROR(f,e,txt) do \
@@ -488,14 +491,9 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
 	ALSA_TraceParameters(hw_params, sw_params, FALSE);
 
     /* now, we can save all required data for later use... */
-    if ( wwi->hw_params )
-	snd_pcm_hw_params_free(wwi->hw_params);
-    snd_pcm_hw_params_malloc(&(wwi->hw_params));
-    snd_pcm_hw_params_copy(wwi->hw_params, hw_params);
 
     wwi->dwBufferSize = snd_pcm_frames_to_bytes(pcm, buffer_size);
     wwi->lpQueuePtr = wwi->lpPlayPtr = wwi->lpLoopPtr = NULL;
-    wwi->pcm = pcm;
 
     ALSA_InitRingMessage(&wwi->msgRing);
 
@@ -519,8 +517,10 @@ static DWORD widOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
     CloseHandle(wwi->hStartUpEvent);
     wwi->hStartUpEvent = NULL;
 
-    HeapFree( GetProcessHeap(), 0, hw_params );
     HeapFree( GetProcessHeap(), 0, sw_params );
+    wwi->hw_params = hw_params;
+    wwi->pcm = pcm;
+
     widNotifyClient(wwi, WIM_OPEN, 0L, 0L);
     return MMSYSERR_NOERROR;
 
@@ -548,12 +548,12 @@ static DWORD widClose(WORD wDevID)
 	return MMSYSERR_BADDEVICEID;
     }
 
-    if (WInDev[wDevID].pcm == NULL) {
+    wwi = &WInDev[wDevID];
+    if (wwi->pcm == NULL) {
 	WARN("Requested to close already closed device %d!\n", wDevID);
 	return MMSYSERR_BADDEVICEID;
     }
 
-    wwi = &WInDev[wDevID];
     if (wwi->lpQueuePtr) {
 	WARN("buffers still playing !\n");
 	return WAVERR_STILLPLAYING;
@@ -563,7 +563,7 @@ static DWORD widClose(WORD wDevID)
 	}
         ALSA_DestroyRingMessage(&wwi->msgRing);
 
-	snd_pcm_hw_params_free(wwi->hw_params);
+	HeapFree( GetProcessHeap(), 0, wwi->hw_params );
 	wwi->hw_params = NULL;
 
         snd_pcm_close(wwi->pcm);
diff --git a/dlls/winealsa.drv/waveout.c b/dlls/winealsa.drv/waveout.c
index 6c50f89..ac3db1a 100644
--- a/dlls/winealsa.drv/waveout.c
+++ b/dlls/winealsa.drv/waveout.c
@@ -576,7 +576,7 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
     WINE_WAVEDEV*	        wwo;
     snd_pcm_t *                 pcm = NULL;
     snd_hctl_t *                hctl = NULL;
-    snd_pcm_hw_params_t *       hw_params = NULL;
+    snd_pcm_hw_params_t *       hw_params;
     snd_pcm_sw_params_t *       sw_params;
     snd_pcm_access_t            access;
     snd_pcm_format_t            format = -1;
@@ -680,8 +680,8 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
 } while(0)
 
     sw_params = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, snd_pcm_sw_params_sizeof() );
-    snd_pcm_hw_params_malloc(&hw_params);
-    if (! hw_params)
+    hw_params = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, snd_pcm_hw_params_sizeof() );
+    if (!hw_params || !sw_params)
     {
         retcode = MMSYSERR_NOMEM;
         goto errexit;
@@ -797,11 +797,9 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags)
 	  wwo->format.Format.nBlockAlign);
 
     HeapFree( GetProcessHeap(), 0, sw_params );
-    wwo->pcm = pcm;
-    wwo->hctl = hctl;
-    if ( wwo->hw_params )
-	snd_pcm_hw_params_free(wwo->hw_params);
     wwo->hw_params = hw_params;
+    wwo->hctl = hctl;
+    wwo->pcm = pcm;
 
     wodNotifyClient(wwo, WOM_OPEN, 0L, 0L);
     return MMSYSERR_NOERROR;
@@ -816,9 +814,7 @@ errexit:
         snd_hctl_close(hctl);
     }
 
-    if ( hw_params )
-	snd_pcm_hw_params_free(hw_params);
-
+    HeapFree( GetProcessHeap(), 0, hw_params );
     HeapFree( GetProcessHeap(), 0, sw_params );
     if (wwo->msgRing.ring_buffer_size > 0)
         ALSA_DestroyRingMessage(&wwo->msgRing);
@@ -841,12 +837,12 @@ static DWORD wodClose(WORD wDevID)
 	return MMSYSERR_BADDEVICEID;
     }
 
-    if (WOutDev[wDevID].pcm == NULL) {
+    wwo = &WOutDev[wDevID];
+    if (wwo->pcm == NULL) {
 	WARN("Requested to close already closed device %d!\n", wDevID);
 	return MMSYSERR_BADDEVICEID;
     }
 
-    wwo = &WOutDev[wDevID];
     if (wwo->lpQueuePtr) {
 	WARN("buffers still playing !\n");
 	return WAVERR_STILLPLAYING;
@@ -856,20 +852,18 @@ static DWORD wodClose(WORD wDevID)
 	}
         ALSA_DestroyRingMessage(&wwo->msgRing);
 
-        if (wwo->hw_params)
-	    snd_pcm_hw_params_free(wwo->hw_params);
+	HeapFree( GetProcessHeap(), 0, wwo->hw_params );
 	wwo->hw_params = NULL;
 
-        if (wwo->pcm)
-            snd_pcm_close(wwo->pcm);
-	wwo->pcm = NULL;
-
         if (wwo->hctl)
         {
             snd_hctl_free(wwo->hctl);
             snd_hctl_close(wwo->hctl);
+            wwo->hctl = NULL;
         }
-	wwo->hctl = NULL;
+
+	snd_pcm_close(wwo->pcm);
+	wwo->pcm = NULL;
 
 	wodNotifyClient(wwo, WOM_CLOSE, 0L, 0L);
     }




More information about the wine-cvs mailing list