PromyLOPh / pianobar

Console-based pandora.com player
http://6xq.net/pianobar/
Other
1.74k stars 321 forks source link

Pianobar freezes after each song #654

Closed Vi1i closed 4 months ago

Vi1i commented 6 years ago

Starts just fine, but then freezes at the end of a song.

[USER:~/git/dotfiles] master(+59/-108) ± pianobar 
Welcome to pianobar (2017.08.30)! Press ? for a list of commands.
(i) Control fifo at /home/USER/.config/pianobar/ctl opened
(i) Login... Ok.
(i) Get stations... Ok.
|>  Station "L-Red Hot Chili Peppers" (1822073149661466621)
(i) Receiving new playlist... Ok.
|>  "Someday" by "The Strokes" on "Is This It"
#   -00:00/03:07

I couldn't get it to compile with symbols with make debug... But the below output is gdb and I let it sit waiting for a while before I interrupted it.

(gdb) run
Starting program: /home/USER/git/pianobar/pianobar 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
Welcome to pianobar (2017.08.30-dev)! Press ? for a list of commands.
(i) Control fifo at /home/USERN/.config/pianobar/ctl opened
(i) Login... [New Thread 0x7fffe3dff700 (LWP 6225)]
[Thread 0x7fffe3dff700 (LWP 6225) exited]
Ok.
(i) Get stations... [New Thread 0x7fffe3dff700 (LWP 6244)]
[Thread 0x7fffe3dff700 (LWP 6244) exited]
Ok.
|>  Station "L-Red Hot Chili Peppers" (1822073149661466621)
(i) Receiving new playlist... Ok.
|>  "Inside Out" by "Eve 6" on "Eve 6" <3
[New Thread 0x7fffe3dff700 (LWP 6263)]
[New Thread 0x7fffe2d67700 (LWP 6264)]
[New Thread 0x7fffe2566700 (LWP 6265)]
[New Thread 0x7fffe1d65700 (LWP 6266)]
[New Thread 0x7fffe1564700 (LWP 6267)]
[New Thread 0x7fffe0d63700 (LWP 6268)]
#   -00:00/03:39
Thread 1 "pianobar" received signal SIGINT, Interrupt.
0x00007ffff49ab7b3 in select () from /usr/lib/libc.so.6
(gdb)

Now without gdb, when I hit ^C, it jumps out of the freeze and goes to the next song.

I skimmed the issues and saw some like it, but I didn't really see a fix that I could do on my side. Though I could have missed it.

PromyLOPh commented 6 years ago

I skimmed the issues and saw some like it, but I didn't really see a fix that I could do on my side. Though I could have missed it.

There’s #623 for example, which suggests pulseaudio is to blame. See https://github.com/PromyLOPh/pianobar/issues/433#issuecomment-38393851 for a fix.

Vi1i commented 6 years ago

Yep, I tried this fix already, but this did not solve my issue. I had this issue before I installed pulseaudio onto my system, and had hoped pulseaudio would fix this. As it did not, I am left with a very similar issues as the #623 has. I am on Arch Linux, 4.15.5-1-ARCH x86_64 GNU/Linux. I am currently using plain old bash, usually gnome-terminal for my terminal emulator. I am using i3 for my window manager. I have run from git repo and from the community Arch repo, they both have this issue.

PromyLOPh commented 6 years ago

Does this happen when skipping a song (ban, next, tired, …) too? Any eventcmd scripts set up?

Since you’re using Arch and probably compiling software yourself: Which compiler and CFLAGS did you use to compile pianobar and dependencies?

Vi1i commented 6 years ago

When current song is playing:

When current song has reached frozen state:

While I would like to have eventcmd set up, I have yet to take the step as I want to get pianobar working properly before I attempted to add more complexity. Though I do have a fifo file prepared, but nothing is using it.

Currently I am using pacman:

community/pianobar 2017.08.30-3 [installed]
    Console-based frontend for Pandora

When I compiled it myself from git I did not want to modify the, though with this last statment I did just that, so I added -g3 to the CFLAGS and got the symbols:

GNU gdb (GDB) 8.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from pianobar...done.
(gdb) run
Starting program: /home/USER/git/pianobar/pianobar 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
Welcome to pianobar (2017.08.30-dev)! Press ? for a list of commands.
(i) Control fifo at /home/USER/.fifo/pianobar opened
(i) Login... [New Thread 0x7fffe3dff700 (LWP 19734)]
[Thread 0x7fffe3dff700 (LWP 19734) exited]
Ok.
(i) Get stations... [New Thread 0x7fffe3dff700 (LWP 19735)]
[Thread 0x7fffe3dff700 (LWP 19735) exited]
Ok.
|>  Station "Classical Radio" (3901253271328215037)
(i) Receiving new playlist... Ok.
|>  "Piano Sonata No. 1 in C minor, Op. 4, CT. 201" by "Chopin, Fryderyk" on "Vladimir Ashkenazy, Chopin: Piano Sonatas; Etudes"
[New Thread 0x7fffe3dff700 (LWP 19814)]
[New Thread 0x7fffe2d67700 (LWP 19856)]
[New Thread 0x7fffe2566700 (LWP 19857)]
[New Thread 0x7fffe1d65700 (LWP 19858)]
[New Thread 0x7fffe1564700 (LWP 19859)]
[New Thread 0x7fffe0d63700 (LWP 19860)]
#   -00:00/04:03
Thread 1 "pianobar" received signal SIGINT, Interrupt.
0x00007ffff49ab7b3 in select () from /usr/lib/libc.so.6
(gdb) backtrace 
#0  0x00007ffff49ab7b3 in select () from /usr/lib/libc.so.6
#1  0x000055555555fb84 in BarReadline (buf=0x7fffffffe490 "", bufSize=2, mask=0x0, 
    input=0x555555767820 <app+736>, 
    flags=(BAR_RL_FULLRETURN | BAR_RL_NOECHO | BAR_RL_NOINT), timeout=<optimized out>)
    at src/ui_readline.c:88
#2  0x0000555555559a09 in BarMainHandleUserInput (app=0x555555767540 <app>)
    at src/main.c:203
#3  BarMainLoop (app=0x555555767540 <app>) at src/main.c:389
#4  main (argc=<optimized out>, argv=<optimized out>) at src/main.c:491
(gdb) 
langner commented 6 years ago

I get this when liking/banning a song as well. Haven't tried next song yet.

I checked, and next song works fine for me. But liking just says "Loving song...." and freezes (the current song continues until it's done. I can unblock with a Ctrl+C, though.

PromyLOPh commented 6 years ago

Can you apply this patch on top of master and report whether it fixes the issue or not?

https://gist.github.com/anonymous/f4bedb982de18683f2f70e0ecc403fc4

Vi1i commented 6 years ago

So I am still getting the same issue, I ran the debugger again, got the same output but this time I tried to force it to continue. Looks like it is getting caught up in a pthread_join()? If you need me to do something more specific let me know, happy to help.

[USER:~/git/pianobar] master(+74/-41)* ± gdb pianobar 
GNU gdb (GDB) 8.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from pianobar...done.
(gdb) run
Starting program: /home/USER/git/pianobar/pianobar 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
Welcome to pianobar (2017.08.30-dev)! Press ? for a list of commands.
(i) Control fifo at /home/USER/.fifo/pianobar opened
(i) Login... [New Thread 0x7fffe3dff700 (LWP 5403)]
[Thread 0x7fffe3dff700 (LWP 5403) exited]
Ok.
(i) Get stations... [New Thread 0x7fffe3dff700 (LWP 5404)]
[Thread 0x7fffe3dff700 (LWP 5404) exited]
Ok.
|>  Station "Classical Radio" (3901253271328215037)
(i) Receiving new playlist... Ok.
|>  "Gymnopédies (3), For Piano (Also Orchestrated By Debussy)" by "Satie, Erik" on "Aldo Ciccolini, Satie: Piano Works (1983 Version)"
[New Thread 0x7fffe3dff700 (LWP 5489)]
[New Thread 0x7fffe2d67700 (LWP 5490)]
[New Thread 0x7fffe2566700 (LWP 5491)]
[New Thread 0x7fffe1d65700 (LWP 5492)]
[New Thread 0x7fffe1564700 (LWP 5493)]
[New Thread 0x7fffe0d63700 (LWP 5494)]
#   -00:00/03:08
Thread 1 "pianobar" received signal SIGINT, Interrupt.
0x00007ffff49ab7b3 in select () from /usr/lib/libc.so.6
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) n
Program not restarted.
(gdb) con
condition  continue   
(gdb) continue 
Continuing.
#   -00:00/03:08
Thread 1 "pianobar" received signal SIGINT, Interrupt.
0x00007ffff49ab7b3 in select () from /usr/lib/libc.so.6
(gdb) continue
Continuing.
#   -00:00/03:08
Thread 1 "pianobar" received signal SIGINT, Interrupt.
0x00007ffff49ab7b3 in select () from /usr/lib/libc.so.6
(gdb) continue
Continuing.
#   -00:00/03:08
Thread 1 "pianobar" received signal SIGINT, Interrupt.
0x00007ffff49ab7b3 in select () from /usr/lib/libc.so.6
(gdb) step
Single stepping until exit from function select,
which has no line number information.
BarReadline (buf=0x7fffffffe430 "", bufSize=2, mask=0x0, input=0x555555767818 <app+728>, 
    flags=(BAR_RL_FULLRETURN | BAR_RL_NOECHO | BAR_RL_NOINT), timeout=<optimized out>)
    at src/ui_readline.c:91
91              bufLen = 0;
(gdb) continue
Continuing.
#   -00:00/03:08
Thread 1 "pianobar" received signal SIGINT, Interrupt.
0x00007ffff7bc245d in pthread_join () from /usr/lib/libpthread.so.0
(gdb) next
Single stepping until exit from function pthread_join,
which has no line number information.

Thread 1 "pianobar" received signal SIGINT, Interrupt.
0x00007ffff7bc245d in pthread_join () from /usr/lib/libpthread.so.0
(gdb) finish
Run till exit from #0  0x00007ffff7bc245d in pthread_join () from /usr/lib/libpthread.so.0

Thread 1 "pianobar" received signal SIGINT, Interrupt.
0x00007ffff7bc245d in pthread_join () from /usr/lib/libpthread.so.0
(gdb) continue
Continuing.

Thread 1 "pianobar" received signal SIGINT, Interrupt.
0x00007ffff7bc245d in pthread_join () from /usr/lib/libpthread.so.0
(gdb) step
Single stepping until exit from function pthread_join,
which has no line number information.

Thread 1 "pianobar" received signal SIGINT, Interrupt.
0x00007ffff7bc245d in pthread_join () from /usr/lib/libpthread.so.0
(gdb) continue
Continuing.
PromyLOPh commented 6 years ago

First of all note that ^C is intercepted by GDB – it never reaches pianobar. I wonder what the player thread is doing. Can you run thread apply all backtrace after interrupting gdb?