[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