summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <waker@users.sourceforge.net>2014-07-15 22:35:28 +0200
committerGravatar Alexey Yakovenko <waker@users.sourceforge.net>2014-07-15 22:35:28 +0200
commit43b2df5cfbeb2f6434557fb6af0ae07f34149f24 (patch)
tree18a460d0969a55bf2d0b0f8bbe44dd2cd539677e
parent179702871911a1aa9e30776e141392c50064b3da (diff)
streamer streamer_start_playback race condition (HACK)
-rw-r--r--main.c3
-rw-r--r--streamer.c4
-rw-r--r--streamer.h1
3 files changed, 6 insertions, 2 deletions
diff --git a/main.c b/main.c
index dbaed838..d2466c94 100644
--- a/main.c
+++ b/main.c
@@ -574,9 +574,8 @@ player_mainloop (void) {
streamer_play_current_track ();
break;
case DB_EV_PLAY_NUM:
- output->stop ();
pl_playqueue_clear ();
- streamer_set_nextsong (p1, 1);
+ streamer_set_nextsong (p1, 4);
if (pl_get_order () == PLAYBACK_ORDER_SHUFFLE_ALBUMS) {
int pl = streamer_get_current_playlist ();
playlist_t *plt = plt_get_for_idx (pl);
diff --git a/streamer.c b/streamer.c
index e5175551..1dd01031 100644
--- a/streamer.c
+++ b/streamer.c
@@ -1326,6 +1326,10 @@ streamer_set_nextsong (int song, int pstate) {
static void
streamer_set_nextsong_real (int song, int pstate) {
DB_output_t *output = plug_get_output ();
+ if (pstate == 4) {
+ pstate = 1;
+ output->stop ();
+ }
trace ("streamer_set_nextsong %d %d\n", song, pstate);
streamer_abort_files ();
streamer_lock ();
diff --git a/streamer.h b/streamer.h
index 471357d7..7c3f00bb 100644
--- a/streamer.h
+++ b/streamer.h
@@ -66,6 +66,7 @@ streamer_unlock (void);
// 1 switch to current (gui) playlist, play if not playing
// 2 pause
// 3 play if not playing, don't switch playlist
+// 4 same as 1, but stops playback before proceeding
void
streamer_set_nextsong (int song, int pstate);