dsound: Don't bother shrinking the secondary buffer list.
Michael Stefaniuc
mstefani at redhat.de
Tue Sep 25 16:23:31 CDT 2012
Initial issue spotted by Valgrind (HeapRealloc with size 0).
---
dlls/dsound/dsound.c | 28 ++++++++++++++--------------
1 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/dlls/dsound/dsound.c b/dlls/dsound/dsound.c
index a7a6f13..666f29f 100644
--- a/dlls/dsound/dsound.c
+++ b/dlls/dsound/dsound.c
@@ -20,6 +20,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include <assert.h>
#include <stdarg.h>
#include <stdio.h>
@@ -1090,22 +1091,21 @@ HRESULT DirectSoundDevice_RemoveBuffer(
RtlAcquireResourceExclusive(&(device->buffer_list_lock), TRUE);
- for (i = 0; i < device->nrofbuffers; i++)
- if (device->buffers[i] == pDSB)
- break;
-
- if (i < device->nrofbuffers) {
- /* Put the last buffer of the list in the (now empty) position */
- device->buffers[i] = device->buffers[device->nrofbuffers - 1];
- device->nrofbuffers--;
- device->buffers = HeapReAlloc(GetProcessHeap(),0,device->buffers,sizeof(LPDIRECTSOUNDBUFFER8)*device->nrofbuffers);
- TRACE("buffer count is now %d\n", device->nrofbuffers);
- }
-
- if (device->nrofbuffers == 0) {
- HeapFree(GetProcessHeap(),0,device->buffers);
+ if (device->nrofbuffers == 1) {
+ assert(device->buffers[0] == pDSB);
+ HeapFree(GetProcessHeap(), 0, device->buffers);
device->buffers = NULL;
+ } else {
+ for (i = 0; i < device->nrofbuffers; i++) {
+ if (device->buffers[i] == pDSB) {
+ /* Put the last buffer of the list in the (now empty) position */
+ device->buffers[i] = device->buffers[device->nrofbuffers - 1];
+ break;
+ }
+ }
}
+ device->nrofbuffers--;
+ TRACE("buffer count is now %d\n", device->nrofbuffers);
RtlReleaseResource(&(device->buffer_list_lock));
--
1.7.6.5
More information about the wine-patches
mailing list