[player] Quick fix for short track segfault (issue #733)

With short tracks reading ends before playback starts, so event_read_eof comes
before event_play_start, which causes playing_now to point to a null
reading_now.

With this change it will point to a non-null reading_prev, but note that in the
hopefully rare case of multiple short tracks, the playing_now pointer will
still be incorrect.
This commit is contained in:
ejurgensen 2019-05-05 23:21:28 +02:00
parent d43e688dfd
commit 1948dcb959

View File

@ -707,7 +707,13 @@ session_update_play_eof(void)
static void
session_update_play_start(void)
{
pb_session.playing_now = pb_session.reading_now;
// If the track was really short, reading may have ended before we started
// playing the track. Note that the below will fail if we have multiple very
// short tracks in a row. A bit of an edge case, but still a FIXME.
if (pb_session.reading_now)
pb_session.playing_now = pb_session.reading_now;
else
pb_session.playing_now = pb_session.reading_prev;
// This is a stupid work-around to make sure pos_ms is non-zero, because a
// zero value means that get_status() tells the clients that we are paused.