@@ -501,41 +501,33 @@ class NativeAudioSource {
501501 }
502502
503503 static function streamUpdate (_ : Int ) {
504- final acquired = streamMutex .tryAcquire ();
504+ if ( ! streamMutex .tryAcquire ()) return ;
505505
506506 var i = queuedStreamSources .length , source : NativeAudioSource ;
507507 while (i -- > 0 ) streamSources .push (queuedStreamSources [i ]);
508508 queuedStreamSources .resize (0 );
509509
510510 i = streamSources .length ;
511511 while (i -- > 0 ) {
512- if ((source = streamSources [i ]).streamRemove ) {
513- if (acquired ) source .removeStream ();
514- else continue ;
515- }
516- else if (source .source == null ) {
517- if (acquired ) source .removeStream ();
518- else source .stopStream ();
519- }
512+ if ((source = streamSources [i ]).streamRemove || source .source == null ) source .removeStream ();
520513 else {
521- if ( acquired ) source .skipBuffers (AL .getSourcei (source .source , AL .BUFFERS_PROCESSED ));
514+ source .skipBuffers (AL .getSourcei (source .source , AL .BUFFERS_PROCESSED ));
522515 source .flushBuffers ();
523516 if (AL .getSourcei (source .source , AL .SOURCE_STATE ) == AL .STOPPED ) {
524517 AL .sourcePlay (source .source );
525518 source .updateCompleteTimer ();
526519 }
520+ if (source ,streamEnded && source .requestBuffers == source .queuedBuffers ) source .removeStream ();
527521 }
528522 }
529523
530- if (acquired ) {
531- streamMutex .release ();
532- if (streamSources .length == 0 ) {
533- Application .current .onUpdate .remove (streamUpdate );
534- if (threadRunning ) streamThread .sendMessage (0 );
535- }
536- else if (threadRunning || (threadRunning = (streamThread = Thread .create (streamThreadRun )) != null ))
537- streamThread .sendMessage (streamSources .length );
524+ streamMutex .release ();
525+ if (streamSources .length == 0 ) {
526+ Application .current .onUpdate .remove (streamUpdate );
527+ if (threadRunning ) streamThread .sendMessage (0 );
538528 }
529+ else if (threadRunning || (threadRunning = (streamThread = Thread .create (streamThreadRun )) != null ))
530+ streamThread .sendMessage (streamSources .length );
539531 }
540532
541533 function removeStream () {
0 commit comments