@@ -387,9 +387,9 @@ class NativeAudioSource {
387387 wasEOF = false ;
388388 }
389389 }
390- catch (e : Dynamic ) {
391- trace (e );
392- result = - 1 ;
390+ catch (e : haxe. Exception ) {
391+ trace (' NativeAudioSource readToBufferData Bug! error: ${ e . message } | ${ e . stack } , streamEnded: $ streamEnded , total: $ total , n: $ n ' );
392+ return result ;
393393 }
394394
395395 if (result < 0 ) {
@@ -444,40 +444,42 @@ class NativeAudioSource {
444444 for (i in (STREAM_MAX_BUFFERS - queuedBuffers )... STREAM_MAX_BUFFERS )
445445 if (sec >= (bufferTime = bufferTimes [i ]) && sec < bufferTime + (bufferLengths [i ] / wordSize / channels / sampleRate ))
446446 {
447+ #if audio_stream_async streamMutex .acquire (); #end
447448 skipBuffers (i - STREAM_MAX_BUFFERS + queuedBuffers );
448- fillBuffers (STREAM_MIN_BUFFERS - STREAM_MAX_BUFFERS + i );
449449 AL .sourcei (source , AL .SAMPLE_OFFSET , Math .floor ((sec - bufferTime ) * sampleRate ));
450+ fillBuffers (STREAM_MIN_BUFFERS - STREAM_MAX_BUFFERS + i );
451+ #if audio_stream_async streamMutex .release (); #end
450452 return flushBuffers ();
451453 }
452454 }
453455
454456 AL .sourceUnqueueBuffers (source , AL .getSourcei (source , AL .BUFFERS_QUEUED ));
455457
458+ #if audio_stream_async streamMutex .acquire (); #end
456459 streamEnded = false ;
457460 streamSeek (Int64 .fromFloat (sec * sampleRate ));
458461
459462 requestBuffers = queuedBuffers = streamLoops = nextBuffer = 0 ;
460463 fillBuffers (STREAM_MIN_BUFFERS );
461464 flushBuffers ();
465+ #if audio_stream_async streamMutex .release (); #end
462466 }
463467
464468 #if audio_stream_async
465469 static function streamThreadRun () {
466470 var i : Int , source : NativeAudioSource , process : Int ;
467471
468472 while ((i = Thread .readMessage (true )) != 0 ) {
469- streamMutex .acquire ();
470-
471473 while (i -- > 0 ) {
472- if ((source = streamSources [i ]).parent .buffer == null || source . parent . buffer . __srcVorbisFile == null ) {
474+ if ((source = streamSources [i ]).parent .buffer == null ) {
473475 source .stopStream ();
474476 continue ;
475477 }
478+ streamMutex .acquire ();
476479 process = source .requestBuffers < STREAM_MIN_BUFFERS ? STREAM_MIN_BUFFERS - source .requestBuffers : 0 ;
477480 source .fillBuffers (STREAM_PROCESS_BUFFERS > process ? STREAM_PROCESS_BUFFERS : process );
481+ streamMutex .release ();
478482 }
479-
480- streamMutex .release ();
481483 }
482484
483485 threadRunning = false ;
0 commit comments