<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        font-size:10.5pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-indent:21.0pt;
        font-size:10.5pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle18
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
/* Page Definitions */
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:699478496;
        mso-list-type:hybrid;
        mso-list-template-ids:239767348 -522145282 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:18.0pt;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level3
        {mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level4
        {mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level5
        {mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level6
        {mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level7
        {mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level8
        {mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level9
        {mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=ZH-CN link=blue vlink=purple style='text-justify-trim:punctuation'><div class=WordSection1><p class=MsoNormal><span lang=EN-US>I got a thread deadlock during audio routing. Could anyone share some advice to debug a deadlocked thread? Great thanks!<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>My scenario is:<o:p></o:p></span></p><p class=MsoListParagraph style='margin-left:18.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2'><![if !supportLists]><span lang=EN-US><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span lang=EN-US>make a VOIP call with a Bluetooth headset, <o:p></o:p></span></p><p class=MsoListParagraph style='margin-left:18.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2'><![if !supportLists]><span lang=EN-US><span style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span lang=EN-US>disconnect the Bluetooth headset during the phone call<o:p></o:p></span></p><p class=MsoListParagraph style='margin-left:18.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2'><![if !supportLists]><span lang=EN-US><span style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span lang=EN-US>then the phone input &amp; output stream shall be routed back to ALSA sink &amp; source and module-echo-cancel&#8217;s filter sink&amp; source shall be automatically inserted.<o:p></o:p></span></p><p class=MsoListParagraph style='margin-left:18.0pt;text-indent:0cm'><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>But I got a deadlock on step 3. It seems the AEC virtual sink does not process &quot; PA_SINK_MESSAGE_SET_STATE &quot; and blocks PA main thread when the phone stream is moving to it. And I found module-echo-cancel&#8217;s message handler has not been called. So I think the IO thread (ALSA sink&#8217;s IO thread, right?) which shall call the message handler is also deadlocked. <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>Could anyone share some advice on the possible reason of this deadlock? How could I find out the where the IO thread is blocked by gdb? <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>Here is the main thread stack on deadlock:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#1&nbsp; 0x4d8d28d5 in sem_wait () at ../nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S:80&nbsp; &#8230;&#8230;. Here is the deadlock, when AEC filter sink update status to RUNNING<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#2&nbsp; 0x42684ad8 in pa_semaphore_wait (s=0x8ab5fd8) at pulsecore/semaphore-posix.c:63<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#3&nbsp; 0x4de0f94a in pa_asyncmsgq_send (a=0x8b3ba00, object=0x8ab5ff0, code=11, userdata=0x0, offset=0, chunk=0x0) at pulsecore/asyncmsgq.c:169<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#4&nbsp; 0x4de48ee9 in sink_set_state (s=&lt;value optimized out&gt;, state=&lt;value optimized out&gt;) at pulsecore/sink.c:415<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#5&nbsp; 0x4de459ec in pa_sink_input_finish_move (i=0x8b581b0, dest=0x8ab5ff0, save=false) at pulsecore/sink-input.c:1530&nbsp;&nbsp; &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; the phone input stream is moving to the AEC filter sink, triggered by module-filter-apply<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#6&nbsp; 0x4de464e7 in pa_sink_input_move_to (i=0x8b581b0, dest=0x8ab5ff0, save=false) at pulsecore/sink-input.c:1587<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#7&nbsp; 0xb6c44b02 in do_move (o=0x8b581b0, filter=&lt;value optimized out&gt;, restore=false, is_sink_input=true) at modules/module-filter-apply.c:192<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#8&nbsp; move_object_for_filter (o=0x8b581b0, filter=&lt;value optimized out&gt;, restore=false, is_sink_input=true) at modules/module-filter-apply.c:217<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#9&nbsp; 0xb6c45d73 in process (u=0x8a8d0c8, o=&lt;value optimized out&gt;, is_sink_input=true) at modules/module-filter-apply.c:340<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#10 0x4de2607f in pa_hook_fire (hook=0x8a6f054, data=0x8b581b0) at pulsecore/hook-list.c:104<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#11 0x4de45aaf in pa_sink_input_finish_move (i=0x8b581b0, dest=0x8aa9af0, save=false) at pulsecore/sink-input.c:1539&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230; the phone input stream is moving to the ALSA sink after the Bluetooth HSP sink disappears<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>#12 0x4de4c51d in pa_sink_move_all_finish (s=0x8aa9af0, q=0x8b63a58, save=false) at pulsecore/sink.c:740<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#13 0xb6c35da2 in card_set_profile (c=0x8aa7ac0, new_profile=0x8aa7940) at modules/alsa/module-alsa-card.c:352<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#14 0xb2a7da21 in restore_sco_card_default_profile (u=0x8b57e00) at modules/bluetooth/module-bluetooth-device.c:2073<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#15 stop_thread (u=0x8b57e00) at modules/bluetooth/module-bluetooth-device.c:2515<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#16 0xb2a7e8ab in module_bluetooth_device_LTX_pa__done (m=0x8b53540) at modules/bluetooth/module-bluetooth-device.c:3123<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#17 0x4de27b08 in pa_module_free (m=&lt;value optimized out&gt;) at pulsecore/module.c:165<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#18 0x4de2850d in defer_cb (api=0x8a6cc70, e=0x8b46a28, userdata=0x8a6ed90) at pulsecore/module.c:231<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#19 0x42b23a0b in dispatch_defer (m=0x8a6cc30) at pulse/mainloop.c:706<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#20 pa_mainloop_dispatch (m=0x8a6cc30) at pulse/mainloop.c:922<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#21 0x42b23e11 in pa_mainloop_iterate (m=0x8a6cc30, block=1, retval=0xbfa70228) at pulse/mainloop.c:962<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#22 0x42b23ee4 in pa_mainloop_run (m=0x8a6cc30, retval=0xbfa70228) at pulse/mainloop.c:977<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#23 0x08053b32 in main (argc=4, argv=0xbfa703f4) at daemon/main.c:1135<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span lang=EN-US>Thanks &amp; Best Regards<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>Amanda<o:p></o:p></span></p></div></body></html>