Index: Slim/Player/StreamingController.pm =================================================================== --- Slim/Player/StreamingController.pm (revision 24113) +++ Slim/Player/StreamingController.pm (working copy) @@ -202,10 +202,10 @@ ], StreamingFailed => [ [ \&_Invalid, \&_BadState, \&_BadState, \&_Invalid], # STOPPED - [ \&_BadState, \&_NextOrStop, \&_NextOrStop, \&_BadState], # BUFFERING - [ \&_BadState, \&_NextIfMore, \&_NextIfMore, \&_BadState], # WAITING_TO_SYNC - [ \&_Invalid, \&_NextIfMore, \&_NextIfMore, \&_Invalid], # PLAYING - [ \&_Invalid, \&_NextIfMore, \&_NextIfMore, \&_Invalid], # PAUSED + [ \&_BadState, \&_StopNextIfMore, \&_StopNextIfMore, \&_BadState], # BUFFERING + [ \&_BadState, \&_StopNextIfMore, \&_StopNextIfMore, \&_BadState], # WAITING_TO_SYNC + [ \&_Invalid, \&_StopNextIfMore, \&_StopNextIfMore, \&_Invalid], # PLAYING + [ \&_Invalid, \&_StopNextIfMore, \&_StopNextIfMore, \&_Invalid], # PAUSED ], EndOfStream => [ [ \&_NoOp, \&_BadState, \&_BadState, \&_NoOp], # STOPPED @@ -809,10 +809,12 @@ _getNextTrack($self, $params, 1); } -sub _NextOrStop { # -> Stopped, Idle; IF [moreTracks] THEN getNextTrack -> TrackWait ENDIF +sub _StopNextIfMore { # -> Stopped, Idle; IF [moreTracks] THEN getNextTrack -> TrackWait ENDIF my ($self, $event, $params) = @_; - _setPlayingState($self, STOPPED); - _setStreamingState($self, IDLE); + + # bug 10165: need to force stop in case the failure that got use here did not stop all active players + _Stop(@_); + _getNextTrack($self, $params, 1); }