[pulseaudio-discuss] [PATCH] thread-mq: make pa_thread_mq_done() safe for subsequent calls
David Henningsson
david.henningsson at canonical.com
Wed May 15 06:35:40 PDT 2013
On 05/14/2013 04:09 PM, Tanu Kaskinen wrote:
> void pa_thread_mq_done(pa_thread_mq *q) {
> pa_assert(q);
>
> + if (!q->mainloop && !q->inq && !q->outq &&
> + !q->read_event && !q->write_event)
> + return;
> +
> + pa_assert(q->mainloop);
> + pa_assert(q->inq && q->outq);
> + pa_assert(q->read_event && q->write_event);
> +
Coincidentally, a person with IRC nickname "johnflux" was on the channel
today posting a backtrace that could be related to this.
I'm reposting this backtrace as attachment - he was running Ubuntu 13.04
(which corresponds to PulseAudio 3.x-stable).
--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
-------------- next part --------------
Calling gdb command: gdb --ex 'set debug-file-directory /tmp/apport_sandbox_nhAcw_/usr/lib/debug' --ex 'set solib-absolute-prefix /tmp/apport_sandbox_nhAcw_' --ex 'file "/tmp/apport_sandbox_nhAcw_//usr/bin/pulseaudio"' --ex 'core-file /tmp/apport_core_CbMtMW'
GNU gdb (GDB) 7.5.91.20130417-cvs-ubuntu
Copyright (C) 2013 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-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Reading symbols from /tmp/apport_sandbox_nhAcw_/usr/bin/pulseaudio...Reading symbols from /tmp/apport_sandbox_nhAcw_/usr/lib/debug/usr/bin/pulseaudio...done.
done.
[New LWP 2058]
[New LWP 2065]
[New LWP 2067]
warning: Can't read pathname for load map: Input/output error.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7fffdc9fe000
Core was generated by `/usr/bin/pulseaudio --start --log-target=syslog'.
Program terminated with signal 11, Segmentation fault.
#0 0x00007fd7dc58acef in pa_thread_mq_done (q=q at entry=0xbb9180) at pulsecore/thread-mq.c:109
109 pulsecore/thread-mq.c: No such file or directory.
(gdb) bt
#0 0x00007fd7dc58acef in pa_thread_mq_done (q=q at entry=0xbb9180) at pulsecore/thread-mq.c:109
#1 0x00007fd7ca390616 in stop_thread (u=u at entry=0xbb9100) at modules/bluetooth/module-bluetooth-device.c:2121
#2 0x00007fd7ca3928b4 in card_set_profile (c=<optimised out>, new_profile=0xbf16a0) at modules/bluetooth/module-bluetooth-device.c:2239
#3 0x00007fd7dc54b593 in pa_card_set_profile (c=0xb311b0, name=name at entry=0x7fd7ca39458e "off", save=save at entry=false) at pulsecore/card.c:284
#4 0x00007fd7ca38d144 in transport_removed_cb (t=<optimised out>, call_data=<optimised out>, u=<optimised out>) at modules/bluetooth/module-bluetooth-device.c:1990
#5 0x00007fd7dc54fcbc in pa_hook_fire (hook=hook at entry=0xba8ca0, data=data at entry=0x0) at pulsecore/hook-list.c:106
#6 0x00007fd7d5067e57 in endpoint_clear_configuration (userdata=0xb48fb0, m=0x7fd7b4007ef0, c=<optimised out>) at modules/bluetooth/bluetooth-util.c:1241
#7 endpoint_handler (c=<optimised out>, m=0x7fd7b4007ef0, userdata=0xb48fb0) at modules/bluetooth/bluetooth-util.c:1458
#8 0x00007fd7dbc4c9f0 in ?? () from /tmp/apport_sandbox_nhAcw_/lib/x86_64-linux-gnu/libdbus-1.so.3
#9 0x00007fd7dbc3ec55 in dbus_connection_dispatch () from /tmp/apport_sandbox_nhAcw_/lib/x86_64-linux-gnu/libdbus-1.so.3
#10 0x00007fd7dc30abdc in dispatch_cb (ea=0xacf7a8, ev=0xb58ef0, userdata=<optimised out>) at pulsecore/dbus-util.c:55
#11 0x00007fd7dc0a0632 in dispatch_defer (m=0xacf750) at pulse/mainloop.c:684
#12 pa_mainloop_dispatch (m=m at entry=0xacf750) at pulse/mainloop.c:899
#13 0x00007fd7dc0a0875 in pa_mainloop_iterate (m=m at entry=0xacf750, block=block at entry=1, retval=retval at entry=0x7fffdc8940f4) at pulse/mainloop.c:939
#14 0x00007fd7dc0a0920 in pa_mainloop_run (m=m at entry=0xacf750, retval=retval at entry=0x7fffdc8940f4) at pulse/mainloop.c:954
#15 0x0000000000406d79 in main (argc=<optimised out>, argv=<optimised out>) at daemon/main.c:1148
(gdb) bt full
#0 0x00007fd7dc58acef in pa_thread_mq_done (q=q at entry=0xbb9180) at pulsecore/thread-mq.c:109
__func__ = "pa_thread_mq_done"
__PRETTY_FUNCTION__ = "pa_thread_mq_done"
#1 0x00007fd7ca390616 in stop_thread (u=u at entry=0xbb9100) at modules/bluetooth/module-bluetooth-device.c:2121
k = <optimised out>
__func__ = "stop_thread"
__PRETTY_FUNCTION__ = "stop_thread"
#2 0x00007fd7ca3928b4 in card_set_profile (c=<optimised out>, new_profile=0xbf16a0) at modules/bluetooth/module-bluetooth-device.c:2239
u = 0xbb9100
d = 0xbf16d0
__func__ = "card_set_profile"
__PRETTY_FUNCTION__ = "card_set_profile"
#3 0x00007fd7dc54b593 in pa_card_set_profile (c=0xb311b0, name=name at entry=0x7fd7ca39458e "off", save=save at entry=false) at pulsecore/card.c:284
profile = 0xbf16a0
r = <optimised out>
__func__ = "pa_card_set_profile"
__PRETTY_FUNCTION__ = "pa_card_set_profile"
#4 0x00007fd7ca38d144 in transport_removed_cb (t=<optimised out>, call_data=<optimised out>, u=<optimised out>) at modules/bluetooth/module-bluetooth-device.c:1990
__func__ = "transport_removed_cb"
__PRETTY_FUNCTION__ = "transport_removed_cb"
#5 0x00007fd7dc54fcbc in pa_hook_fire (hook=hook at entry=0xba8ca0, data=data at entry=0x0) at pulsecore/hook-list.c:106
slot = 0xb4be80
next = <optimised out>
result = PA_HOOK_OK
__func__ = "pa_hook_fire"
__PRETTY_FUNCTION__ = "pa_hook_fire"
#6 0x00007fd7d5067e57 in endpoint_clear_configuration (userdata=0xb48fb0, m=0x7fd7b4007ef0, c=<optimised out>) at modules/bluetooth/bluetooth-util.c:1241
d = 0xb68cb0
t = 0xba8c60
state = 0xffffffffffffffff
r = <optimised out>
e = {name = 0x0, message = 0x0, dummy1 = 1, dummy2 = 0, dummy3 = 0, dummy4 = 1, dummy5 = 0, padding1 = 0x0}
y = 0xb48fb0
path = 0x7fd7b40046d4 "/org/bluez/964/hci0/dev_00_1A_7D_25_C0_A3/fd8"
#7 endpoint_handler (c=<optimised out>, m=0x7fd7b4007ef0, userdata=0xb48fb0) at modules/bluetooth/bluetooth-util.c:1458
y = 0xb48fb0
r = 0x0
e = {name = 0x0, message = 0x0, dummy1 = 1, dummy2 = 0, dummy3 = 0, dummy4 = 0, dummy5 = 0, padding1 = 0x7fffdc893e68}
path = <optimised out>
__func__ = "endpoint_handler"
__PRETTY_FUNCTION__ = "endpoint_handler"
#8 0x00007fd7dbc4c9f0 in ?? () from /tmp/apport_sandbox_nhAcw_/lib/x86_64-linux-gnu/libdbus-1.so.3
No symbol table info available.
#9 0x00007fd7dbc3ec55 in dbus_connection_dispatch () from /tmp/apport_sandbox_nhAcw_/lib/x86_64-linux-gnu/libdbus-1.so.3
No symbol table info available.
#10 0x00007fd7dc30abdc in dispatch_cb (ea=0xacf7a8, ev=0xb58ef0, userdata=<optimised out>) at pulsecore/dbus-util.c:55
conn = <optimised out>
#11 0x00007fd7dc0a0632 in dispatch_defer (m=0xacf750) at pulse/mainloop.c:684
e = 0xb58ef0
r = <optimised out>
#12 pa_mainloop_dispatch (m=m at entry=0xacf750) at pulse/mainloop.c:899
dispatched = 0
__func__ = "pa_mainloop_dispatch"
__PRETTY_FUNCTION__ = "pa_mainloop_dispatch"
#13 0x00007fd7dc0a0875 in pa_mainloop_iterate (m=m at entry=0xacf750, block=block at entry=1, retval=retval at entry=0x7fffdc8940f4) at pulse/mainloop.c:939
r = <optimised out>
__func__ = "pa_mainloop_iterate"
__PRETTY_FUNCTION__ = "pa_mainloop_iterate"
#14 0x00007fd7dc0a0920 in pa_mainloop_run (m=m at entry=0xacf750, retval=retval at entry=0x7fffdc8940f4) at pulse/mainloop.c:954
r = <optimised out>
#15 0x0000000000406d79 in main (argc=<optimised out>, argv=<optimised out>) at daemon/main.c:1148
c = 0xacf920
buf = <optimised out>
conf = 0xacb090
mainloop = 0xacf750
s = <optimised out>
configured_address = 0xacf920 "\002"
r = <optimised out>
retval = 0
d = 3
ltdl_init = true
passed_fd = <optimised out>
e = <optimised out>
daemon_pipe = {-1, -1}
daemon_pipe2 = {-1, -1}
pid_monitor = 0xacd7e0
autospawn_fd = -1
autospawn_locked = false
server_lookup = 0xada700
lookup_service_bus = 0xb12eb0
server_bus = 0xb12eb0
start_server = <optimised out>
__func__ = "main"
__PRETTY_FUNCTION__ = "main"
(gdb) disassemble
Dump of assembler code for function pa_thread_mq_done:
0x00007fd7dc58acc0 <+0>: push %rbx
0x00007fd7dc58acc1 <+1>: mov %rdi,%rbx
0x00007fd7dc58acc4 <+4>: sub $0x20,%rsp
0x00007fd7dc58acc8 <+8>: test %rdi,%rdi
0x00007fd7dc58accb <+11>: je 0x7fd7dc58ad3b <pa_thread_mq_done+123>
0x00007fd7dc58accd <+13>: mov 0x10(%rdi),%rdi
0x00007fd7dc58acd1 <+17>: callq 0x7fd7dc53d3f0 <pa_asyncmsgq_dispatching>
0x00007fd7dc58acd6 <+22>: test %al,%al
0x00007fd7dc58acd8 <+24>: jne 0x7fd7dc58ace8 <pa_thread_mq_done+40>
0x00007fd7dc58acda <+26>: mov 0x10(%rbx),%rdi
0x00007fd7dc58acde <+30>: mov $0x1,%esi
0x00007fd7dc58ace3 <+35>: callq 0x7fd7dc53d2f0 <pa_asyncmsgq_flush>
0x00007fd7dc58ace8 <+40>: mov (%rbx),%rax
0x00007fd7dc58aceb <+43>: mov 0x18(%rbx),%rdi
=> 0x00007fd7dc58acef <+47>: callq *0x18(%rax)
0x00007fd7dc58acf2 <+50>: mov (%rbx),%rax
0x00007fd7dc58acf5 <+53>: mov 0x20(%rbx),%rdi
0x00007fd7dc58acf9 <+57>: callq *0x18(%rax)
0x00007fd7dc58acfc <+60>: mov 0x8(%rbx),%rdi
0x00007fd7dc58ad00 <+64>: movq $0x0,0x20(%rbx)
0x00007fd7dc58ad08 <+72>: movq $0x0,0x18(%rbx)
0x00007fd7dc58ad10 <+80>: callq 0x7fd7dc53c530 <pa_asyncmsgq_unref>
0x00007fd7dc58ad15 <+85>: mov 0x10(%rbx),%rdi
0x00007fd7dc58ad19 <+89>: callq 0x7fd7dc53c530 <pa_asyncmsgq_unref>
0x00007fd7dc58ad1e <+94>: movq $0x0,0x10(%rbx)
0x00007fd7dc58ad26 <+102>: movq $0x0,0x8(%rbx)
0x00007fd7dc58ad2e <+110>: movq $0x0,(%rbx)
0x00007fd7dc58ad35 <+117>: add $0x20,%rsp
0x00007fd7dc58ad39 <+121>: pop %rbx
0x00007fd7dc58ad3a <+122>: retq
0x00007fd7dc58ad3b <+123>: lea 0x1cd1e(%rip),%rax # 0x7fd7dc5a7a60 <__PRETTY_FUNCTION__.7290>
0x00007fd7dc58ad42 <+130>: lea 0xdf86(%rip),%r9 # 0x7fd7dc598ccf
0x00007fd7dc58ad49 <+137>: lea 0x6970(%rip),%r8 # 0x7fd7dc5916c0
0x00007fd7dc58ad50 <+144>: lea 0x1cce9(%rip),%rcx # 0x7fd7dc5a7a40 <__func__.7289>
0x00007fd7dc58ad57 <+151>: mov $0x62,%edx
0x00007fd7dc58ad5c <+156>: xor %edi,%edi
0x00007fd7dc58ad5e <+158>: mov %rax,0x10(%rsp)
0x00007fd7dc58ad63 <+163>: lea 0x1cb8b(%rip),%rax # 0x7fd7dc5a78f5
0x00007fd7dc58ad6a <+170>: movl $0x62,0x8(%rsp)
0x00007fd7dc58ad72 <+178>: mov %rax,%rsi
0x00007fd7dc58ad75 <+181>: mov %rax,(%rsp)
0x00007fd7dc58ad79 <+185>: xor %eax,%eax
0x00007fd7dc58ad7b <+187>: callq 0x7fd7dc53a920 <pa_log_level_meta at plt>
0x00007fd7dc58ad80 <+192>: callq 0x7fd7dc53a420 <abort at plt>
End of assembler dump.
(gdb) info registers
rax 0x0 0
rbx 0xbb9180 12292480
rcx 0x7fffdc893bc0 140736893369280
rdx 0x7fffdc893bb4 140736893369268
rsi 0x0 0
rdi 0x0 0
rbp 0xbf16a0 0xbf16a0
rsp 0x7fffdc893c10 0x7fffdc893c10
r8 0x7fffdc893bc8 140736893369288
r9 0x7fffdc893bd0 140736893369296
r10 0x0 0
r11 0x0 0
r12 0x0 0
r13 0x0 0
r14 0x0 0
r15 0xb48fb0 11833264
rip 0x7fd7dc58acef 0x7fd7dc58acef <pa_thread_mq_done+47>
eflags 0x10202 [ IF RF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
(gdb)
More information about the pulseaudio-discuss
mailing list