Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SIGABRT in MPD::checkErrors() #281

Closed
cole-h opened this issue Apr 22, 2019 · 6 comments
Closed

SIGABRT in MPD::checkErrors() #281

cole-h opened this issue Apr 22, 2019 · 6 comments
Labels
bug Something isn't working
Milestone

Comments

@cole-h
Copy link

cole-h commented Apr 22, 2019

I'm back again, but no solid STR this time. I'll post a reply if I do find something.


After some time (this one actually takes a fairly long while compared to our last two issues), Waybar receives a SIGABRT from libmpdclient, due to a failed assertion: waybar: ../src/ierror.h:130: mpd_error_get_message: Assertion 'error->message != NULL || error->code == MPD_ERROR_OOM' failed.

Backtrace
#0  0x00007ffff5dddd7f in raise () at /usr/lib/libc.so.6
#1  0x00007ffff5dc8672 in abort () at /usr/lib/libc.so.6
#2  0x00007ffff5dc8548 in _nl_load_domain.cold.0 () at /usr/lib/libc.so.6
#3  0x00007ffff5dd6396 in  () at /usr/lib/libc.so.6
#4  0x00007ffff62c60d1 in  () at /usr/lib/libmpdclient.so.2
#5  0x00005555555f8ee4 in waybar::modules::MPD::checkErrors(mpd_connection*) (this=0x5555557ac000, conn=0x7fffd8000b60) at ../src/modules/mpd.cpp:284
#6  0x00005555555f9053 in waybar::modules::MPD::fetchState() (this=0x5555557ac000) at ../src/modules/mpd.cpp:293
#7  0x00005555555f61f6 in waybar::modules::MPD::update() (this=0x5555557ac000) at ../src/modules/mpd.cpp:49
#8  0x00005555555b08d1 in waybar::Bar::<lambda()>::operator()(void) const (__closure=0x55555585bc30) at ../src/bar.cpp:194
#9  0x00005555555b170e in sigc::adaptor_functor<waybar::Bar::getModules(const waybar::Factory&, const string&)::<lambda()> >::operator()(void) const (this=0x55555585bc30) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:256
#10 0x00005555555b15b5 in sigc::internal::slot_call0<waybar::Bar::getModules(const waybar::Factory&, const string&)::<lambda()>, void>::call_it(sigc::internal::slot_rep *) (rep=0x55555585bc00) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:136
#11 0x00007ffff751edea in Glib::DispatchNotifier::pipe_io_handler(Glib::IOCondition) () at /usr/lib/libglibmm-2.4.so.1
#12 0x00007ffff7520ecc in Glib::IOSource::dispatch(sigc::slot_base*) () at /usr/lib/libglibmm-2.4.so.1
#13 0x00007ffff75210cf in Glib::Source::dispatch_vfunc(_GSource*, int (*)(void*), void*) () at /usr/lib/libglibmm-2.4.so.1
#14 0x00007ffff69f8661 in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#15 0x00007ffff69fa739 in  () at /usr/lib/libglib-2.0.so.0
#16 0x00007ffff69fa77e in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#17 0x00007ffff6bb2f5e in g_application_run () at /usr/lib/libgio-2.0.so.0
#18 0x00005555555b621d in waybar::Client::main(int, char**) (this=0x5555556bc8a0, argc=1, argv=0x7fffffffe208) at ../src/client.cpp:258
#19 0x00005555555add3f in main(int, char**) (argc=1, argv=0x7fffffffe208) at ../src/main.cpp:22

Commenting out the auto error_message = mpd_connection_get_error_message(conn); line leads to another abort up in MPD::fetchState(): waybar: ../src/run.c:40: mpd_run_check: Assertion 'connection != NULL' failed.

Backtrace
#0  0x00007ffff5dddd7f in raise () at /usr/lib/libc.so.6
#1  0x00007ffff5dc8672 in abort () at /usr/lib/libc.so.6
#2  0x00007ffff5dc8548 in _nl_load_domain.cold.0 () at /usr/lib/libc.so.6
#3  0x00007ffff5dd6396 in  () at /usr/lib/libc.so.6
#4  0x00007ffff62c1886 in  () at /usr/lib/libmpdclient.so.2
#5  0x00007ffff62c91a9 in mpd_run_status () at /usr/lib/libmpdclient.so.2
#6  0x00005555555f8fe4 in waybar::modules::MPD::fetchState() (this=0x555555768150) at ../src/modules/mpd.cpp:292
#7  0x00005555555f61e6 in waybar::modules::MPD::update() (this=0x555555768150) at ../src/modules/mpd.cpp:49
#8  0x00005555555b08c1 in waybar::Bar::<lambda()>::operator()(void) const (__closure=0x55555588b0d0) at ../src/bar.cpp:194
#9  0x00005555555b16fe in sigc::adaptor_functor<waybar::Bar::getModules(const waybar::Factory&, const string&)::<lambda()> >::operator()(void) const (this=0x55555588b0d0) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:256
#10 0x00005555555b15a5 in sigc::internal::slot_call0<waybar::Bar::getModules(const waybar::Factory&, const string&)::<lambda()>, void>::call_it(sigc::internal::slot_rep *) (rep=0x55555588b0a0) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:136
#11 0x00007ffff751edea in Glib::DispatchNotifier::pipe_io_handler(Glib::IOCondition) () at /usr/lib/libglibmm-2.4.so.1
#12 0x00007ffff7520ecc in Glib::IOSource::dispatch(sigc::slot_base*) () at /usr/lib/libglibmm-2.4.so.1
#13 0x00007ffff75210cf in Glib::Source::dispatch_vfunc(_GSource*, int (*)(void*), void*) () at /usr/lib/libglibmm-2.4.so.1
#14 0x00007ffff69f8661 in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#15 0x00007ffff69fa739 in  () at /usr/lib/libglib-2.0.so.0
#16 0x00007ffff69fa77e in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#17 0x00007ffff6bb2f5e in g_application_run () at /usr/lib/libgio-2.0.so.0
#18 0x00005555555b620d in waybar::Client::main(int, char**) (this=0x5555556bc8a0, argc=1, argv=0x7fffffffe208) at ../src/client.cpp:258
#19 0x00005555555add2f in main(int, char**) (argc=1, argv=0x7fffffffe208) at ../src/main.cpp:22

Looks like we need more NULL handling. Sorry to do this to you again, but cc: @minijackson

EDIT: Got a new one after I commented out the auto error_message line again. waybar: ../src/async.c:273: mpd_async_io: Assertion '!mpd_error_is_defined(&async->error)' failed.

Backtrace
#0  0x00007ffff5dddd7f in raise () at /usr/lib/libc.so.6
#1  0x00007ffff5dc8672 in abort () at /usr/lib/libc.so.6
#2  0x00007ffff5dc8548 in _nl_load_domain.cold.0 () at /usr/lib/libc.so.6
#3  0x00007ffff5dd6396 in  () at /usr/lib/libc.so.6
#4  0x00007ffff62c705d in mpd_async_io () at /usr/lib/libmpdclient.so.2
#5  0x00007ffff62c8a2c in  () at /usr/lib/libmpdclient.so.2
#6  0x00007ffff62c8bb8 in mpd_send_command () at /usr/lib/libmpdclient.so.2
#7  0x00007ffff62c91b6 in mpd_run_status () at /usr/lib/libmpdclient.so.2
#8  0x00005555555f9004 in waybar::modules::MPD::fetchState() (this=0x5555557f9a20) at ../src/modules/mpd.cpp:292
#9  0x00005555555f61f6 in waybar::modules::MPD::update() (this=0x5555557f9a20) at ../src/modules/mpd.cpp:49
#10 0x00005555555b08d1 in waybar::Bar::<lambda()>::operator()(void) const (__closure=0x555555853000) at ../src/bar.cpp:194
#11 0x00005555555b170e in sigc::adaptor_functor<waybar::Bar::getModules(const waybar::Factory&, const string&)::<lambda()> >::operator()(void) const (this=0x555555853000) at /usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:256
#12 0x00005555555b15b5 in sigc::internal::slot_call0<waybar::Bar::getModules(const waybar::Factory&, const string&)::<lambda()>, void>::call_it(sigc::internal::slot_rep *) (rep=0x555555852fd0) at /usr/include/sigc++-2.0/sigc++/functors/slot.h:136
#13 0x00007ffff751edea in Glib::DispatchNotifier::pipe_io_handler(Glib::IOCondition) () at /usr/lib/libglibmm-2.4.so.1
#14 0x00007ffff7520ecc in Glib::IOSource::dispatch(sigc::slot_base*) () at /usr/lib/libglibmm-2.4.so.1
#15 0x00007ffff75210cf in Glib::Source::dispatch_vfunc(_GSource*, int (*)(void*), void*) () at /usr/lib/libglibmm-2.4.so.1
#16 0x00007ffff69f8661 in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#17 0x00007ffff69fa739 in  () at /usr/lib/libglib-2.0.so.0
#18 0x00007ffff69fa77e in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#19 0x00007ffff6bb2f5e in g_application_run () at /usr/lib/libgio-2.0.so.0
#20 0x00005555555b621d in waybar::Client::main(int, char**) (this=0x5555556bc8a0, argc=1, argv=0x7fffffffe208) at ../src/client.cpp:258
#21 0x00005555555add3f in main(int, char**) (argc=1, argv=0x7fffffffe208) at ../src/main.cpp:22
@Alexays Alexays added the bug Something isn't working label Apr 22, 2019
@Alexays
Copy link
Owner

Alexays commented Apr 22, 2019

Also @minijackson any reason for not using sleeper_thread?

return std::thread([this] {

sleeper_thread manages well the case when a bar closes in case of several screens

@minijackson
Copy link
Contributor

Damn, I just keep writing bad code x)
No worries about tagging me, I'm the one who created this mess :p

My first intuition is that it might be bad lock on scheduling (which might explain why it takes a long time):

  • The event listener times out
  • Check error is called
  • While this is happening, in another update, Check error is called
  • The event listener's check error reset the connection
  • The update's check error gets its pointer reset while it's checking errors
  • bam

So, for this theory to be true, we need a checkError that resets the connection without locking the connection mutex, and another checkError happening at the same time.

Then the question is: can this SIGABRT happen while leaving the music paused/stopped and doing nothing? If it can, then it's probably not that.

@minijackson
Copy link
Contributor

@Alexays That's a good question, I think it's because I changed many times the implementation, and then forgot about it. I'll see about refactoring the module. But I'm not sure about what you mean by "manages well the case when a bar closes in case of several screens"

@Alexays
Copy link
Owner

Alexays commented Apr 22, 2019

@minijackson when the module will be destroyed the thread will remains active since it have been detached.

@cole-h
Copy link
Author

cole-h commented Apr 22, 2019

Although I haven't seen it SIGABRT while paused/stopped, that's not to say it couldn't happen (being unfamiliar with the codebase). But all the times it has happened to me has been while playing.

@Alexays Alexays added this to the 1.0.0 milestone May 15, 2019
jgoett154 added a commit to jgoett154/dotfiles that referenced this issue Sep 2, 2019
See Alexays/Waybar#281 for reasoning. Will go back to standard MPD once resolved
@cole-h
Copy link
Author

cole-h commented Nov 25, 2019

I've been running Waybar v0.8.0-52-g0ac05cf (Oct 15 2019, branch 'master') (which includes #467) for a while with no issues, though I haven't been listening to as much music as I once had. I'm going to close this issue, but if anybody else is still encountering this issue, please leave a comment here and I'll reopen it.

@cole-h cole-h closed this as completed Nov 25, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants