Skip to content

Commit a0208dd

Browse files
MyaatsLibretroAdmin
authored andcommitted
(WASAPI) Only write when running and fix deadlock
1 parent c978d79 commit a0208dd

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

audio/drivers/wasapi.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
#include "../../verbosity.h"
2828
#include "../../configuration.h"
2929

30+
/* Max time to wait before continuing */
31+
#define WASAPI_TIMEOUT 256
32+
3033
typedef struct
3134
{
3235
HANDLE write_event;
@@ -200,7 +203,7 @@ static ssize_t wasapi_write_sh_buffer(wasapi_t *w, const void *data, size_t size
200203
if (!write_avail)
201204
{
202205
size_t read_avail = 0;
203-
if (!(WaitForSingleObject(w->write_event, INFINITE) == WAIT_OBJECT_0))
206+
if (!(WaitForSingleObject(w->write_event, WASAPI_TIMEOUT) == WAIT_OBJECT_0))
204207
return -1;
205208

206209
if (FAILED(_IAudioClient_GetCurrentPadding(w->client, &padding)))
@@ -228,7 +231,7 @@ static ssize_t wasapi_write_sh(wasapi_t *w, const void *data, size_t size)
228231
size_t write_avail = 0;
229232
UINT32 padding = 0;
230233

231-
if (!(WaitForSingleObject(w->write_event, INFINITE) == WAIT_OBJECT_0))
234+
if (!(WaitForSingleObject(w->write_event, WASAPI_TIMEOUT) == WAIT_OBJECT_0))
232235
return -1;
233236

234237
if (FAILED(_IAudioClient_GetCurrentPadding(w->client, &padding)))
@@ -319,6 +322,8 @@ static ssize_t wasapi_write(void *wh, const void *data, size_t size)
319322
ssize_t ir = 0;
320323
wasapi_t *w = (wasapi_t*)wh;
321324

325+
if (!w->running) return -1;
326+
322327
if (w->nonblock)
323328
{
324329
if (w->exclusive)
@@ -330,7 +335,7 @@ static ssize_t wasapi_write(void *wh, const void *data, size_t size)
330335
{
331336
for (ir = -1; written < size; written += ir)
332337
{
333-
ir = wasapi_write_ex(w, (char*)data + written, size - written, INFINITE);
338+
ir = wasapi_write_ex(w, (char*)data + written, size - written, WASAPI_TIMEOUT);
334339
if (ir == -1)
335340
return -1;
336341
}

0 commit comments

Comments
 (0)