2727#include "../../verbosity.h"
2828#include "../../configuration.h"
2929
30+ /* Max time to wait before continuing */
31+ #define WASAPI_TIMEOUT 256
32+
3033typedef 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