OSDN Git Service

winwave: remove wait object when finalizing DAC voice
authormalc <av1474@comtv.ru>
Sun, 11 Oct 2009 01:39:09 +0000 (05:39 +0400)
committermalc <av1474@comtv.ru>
Sun, 11 Oct 2009 01:39:14 +0000 (05:39 +0400)
Signed-off-by: malc <av1474@comtv.ru>
audio/winwaveaudio.c

index 16133d1..5bbce2a 100644 (file)
@@ -253,30 +253,31 @@ static int winwave_run_out (HWVoiceOut *hw, int live)
     return decr;
 }
 
+static void winwave_poll_out (void *opaque)
+{
+    (void) opaque;
+    audio_run ("winwave_poll_out");
+}
+
 static void winwave_fini_out (HWVoiceOut *hw)
 {
     WaveVoiceOut *wave = (WaveVoiceOut *) hw;
 
-    winwave_anal_close_out (wave);
-
-    qemu_free (wave->pcm_buf);
-    wave->pcm_buf = NULL;
-
-    qemu_free (wave->hdrs);
-    wave->hdrs = NULL;
-
     if (wave->event) {
+        qemu_del_wait_object (wave->event, winwave_poll_out, wave);
         if (!CloseHandle (wave->event)) {
             AUD_log (AUDIO_CAP, "CloseHandle failed %lx\n", GetLastError ());
         }
         wave->event = NULL;
     }
-}
 
-static void winwave_poll_out (void *opaque)
-{
-    (void) opaque;
-    audio_run ("winwave_poll_out");
+    winwave_anal_close_out (wave);
+
+    qemu_free (wave->pcm_buf);
+    wave->pcm_buf = NULL;
+
+    qemu_free (wave->hdrs);
+    wave->hdrs = NULL;
 }
 
 static int winwave_ctl_out (HWVoiceOut *hw, int cmd, ...)