summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/winwave/play.c6
-rw-r--r--modules/winwave/src.c5
2 files changed, 7 insertions, 4 deletions
diff --git a/modules/winwave/play.c b/modules/winwave/play.c
index e258561..1ca0d44 100644
--- a/modules/winwave/play.c
+++ b/modules/winwave/play.c
@@ -20,7 +20,7 @@ struct auplay_st {
struct dspbuf bufs[WRITE_BUFFERS];
int pos;
HWAVEOUT waveout;
- bool rdy;
+ volatile bool rdy;
size_t inuse;
auplay_write_h *wh;
void *arg;
@@ -41,7 +41,7 @@ static void auplay_destructor(void *arg)
while (st->inuse > 0)
Sleep(50);
- waveOutClose(st->waveout);
+ waveOutReset(st->waveout);
for (i = 0; i < WRITE_BUFFERS; i++) {
waveOutUnprepareHeader(st->waveout, &st->bufs[i].wh,
@@ -49,6 +49,8 @@ static void auplay_destructor(void *arg)
mem_deref(st->bufs[i].mb);
}
+ waveOutClose(st->waveout);
+
mem_deref(st->ap);
}
diff --git a/modules/winwave/src.c b/modules/winwave/src.c
index f480213..9d8793f 100644
--- a/modules/winwave/src.c
+++ b/modules/winwave/src.c
@@ -20,7 +20,7 @@ struct ausrc_st {
struct dspbuf bufs[READ_BUFFERS];
int pos;
HWAVEIN wavein;
- bool rdy;
+ volatile bool rdy;
size_t inuse;
ausrc_read_h *rh;
void *arg;
@@ -36,7 +36,6 @@ static void ausrc_destructor(void *arg)
waveInStop(st->wavein);
waveInReset(st->wavein);
- waveInClose(st->wavein);
for (i = 0; i < READ_BUFFERS; i++) {
waveInUnprepareHeader(st->wavein, &st->bufs[i].wh,
@@ -44,6 +43,8 @@ static void ausrc_destructor(void *arg)
mem_deref(st->bufs[i].mb);
}
+ waveInClose(st->wavein);
+
mem_deref(st->as);
}