Ticket #166 (closed defect: fixed)
Various asserts in pulseaudio that result in mplayer crash
| Reported by: | Stax | Owned by: | lennart |
|---|---|---|---|
| Milestone: | 0.9.11 | Component: | libpulse |
| Keywords: | Cc: |
Description
I'm getting errors which crash mplayer's ao_pulse sometimes. Both seem to happen on stopping playback, making switching to next file in playlist impossible. They are
mplayer: pulse/mainloop.c:287: mainloop_defer_enable: Assertion `e->mainloop->n_enabled_defer_events > 0' failed.
It produces segfault and leaves core file, here is trace:
(gdb) where #0 0x00000037766571db in glDeleteProgramsNV () from /usr/lib64/libGL.so.1 #1 0x000000000049c9e7 in uninitGl () at vo_gl.c:360 #2 0x000000000049ca0a in uninit () at vo_gl.c:774 #3 0x000000000045ae02 in uninit_player (mask=3787) at mplayer.c:615 #4 0x000000000045b27d in exit_player_with_rc (how=0x0, rc=1) at mplayer.c:669 #5 <signal handler called> #6 0x000000376ac30ec5 in raise () from /lib64/libc.so.6 #7 0x000000376ac32970 in abort () from /lib64/libc.so.6 #8 0x000000376ac2a11f in __assert_fail () from /lib64/libc.so.6 #9 0x000000394b417761 in close () from /usr/lib64/libpulse.so.0 #10 0x000000394b42a930 in close () from /usr/lib64/libpulse.so.0 #11 0x000000394b4174b9 in pa_mainloop_dispatch () from /usr/lib64/libpulse.so.0 #12 0x000000394b4175f6 in pa_mainloop_iterate () from /usr/lib64/libpulse.so.0 #13 0x000000394b417680 in pa_mainloop_run () from /usr/lib64/libpulse.so.0 #14 0x000000394b41d79d in close () from /usr/lib64/libpulse.so.0 #15 0x000000394b431d2d in close () from /usr/lib64/libpulse.so.0 #16 0x000000376b806407 in start_thread () from /lib64/libpthread.so.0 #17 0x000000376acd4b0d in clone () from /lib64/libc.so.6 (gdb)
And another one: mplayer: pulsecore/queue.c:67: pa_queue_free: Assertion `q->length == 0' failed.
This one leaves no trace, just crashes, but reports that it happens in uninit function, which looks like this:
static void uninit(int immed) {
if (stream && !immed) {
pa_threaded_mainloop_lock(mainloop);
waitop(pa_stream_drain(stream, success_cb, NULL));
}
if (mainloop)
pa_threaded_mainloop_stop(mainloop);
if (stream) {
pa_stream_disconnect(stream);
pa_stream_unref(stream);
stream = NULL;
}
if (context) {
pa_context_disconnect(context);
pa_context_unref(context);
context = NULL;
}
if (mainloop) {
pa_threaded_mainloop_free(mainloop);
mainloop = NULL;
}
}
Change History
Note: See
TracTickets for help on using
tickets.
