27
27
#include "../../verbosity.h"
28
28
#include "../../configuration.h"
29
29
30
+ /* Max time to wait before continuing */
31
+ #define WASAPI_TIMEOUT 256
32
+
30
33
typedef struct
31
34
{
32
35
HANDLE write_event ;
@@ -200,7 +203,7 @@ static ssize_t wasapi_write_sh_buffer(wasapi_t *w, const void *data, size_t size
200
203
if (!write_avail )
201
204
{
202
205
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 ))
204
207
return -1 ;
205
208
206
209
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)
228
231
size_t write_avail = 0 ;
229
232
UINT32 padding = 0 ;
230
233
231
- if (!(WaitForSingleObject (w -> write_event , INFINITE ) == WAIT_OBJECT_0 ))
234
+ if (!(WaitForSingleObject (w -> write_event , WASAPI_TIMEOUT ) == WAIT_OBJECT_0 ))
232
235
return -1 ;
233
236
234
237
if (FAILED (_IAudioClient_GetCurrentPadding (w -> client , & padding )))
@@ -319,6 +322,8 @@ static ssize_t wasapi_write(void *wh, const void *data, size_t size)
319
322
ssize_t ir = 0 ;
320
323
wasapi_t * w = (wasapi_t * )wh ;
321
324
325
+ if (!w -> running ) return -1 ;
326
+
322
327
if (w -> nonblock )
323
328
{
324
329
if (w -> exclusive )
@@ -330,7 +335,7 @@ static ssize_t wasapi_write(void *wh, const void *data, size_t size)
330
335
{
331
336
for (ir = -1 ; written < size ; written += ir )
332
337
{
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 );
334
339
if (ir == -1 )
335
340
return -1 ;
336
341
}
0 commit comments