<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:SimSun;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@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:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        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-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:215506607;
        mso-list-type:hybrid;
        mso-list-template-ids:-2133002446 1642391122 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:.75in;
        text-indent:-.25in;}
@list l1
        {mso-list-id:313803256;
        mso-list-type:hybrid;
        mso-list-template-ids:-918542410 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
@list l2
        {mso-list-id:1946617695;
        mso-list-type:hybrid;
        mso-list-template-ids:-1149352482 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l2:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
-->
</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="EN-US" link="blue" vlink="purple">
<div class="Section1">
<p class="MsoNormal">Hi,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I need your help to resolve a problem about making method call but no reply got.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">In Dbus_send.c, method call is the sent to remote and block to wait the reply.<o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l1 level1 lfo1"><![if !supportLists]><span style="color:#0070C0"><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#0070C0"> dbus_bus_get()<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l1 level1 lfo1"><![if !supportLists]><span style="color:#0070C0"><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#0070C0">dbus_message_new_method_call()<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l1 level1 lfo1"><![if !supportLists]><span style="color:#0070C0"><span style="mso-list:Ignore">3.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#0070C0">dbus_connection_send_with_reply_and_block()<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">in dbus_recv.c,  message_handler () is registered to handle the method call, then enter the main loop to dispatch the message.<o:p></o:p></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l2 level1 lfo3"><![if !supportLists]><span style="color:#0070C0"><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#0070C0">dbus_bus_get()<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l2 level1 lfo3"><![if !supportLists]><span style="color:#0070C0"><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#0070C0">dbus_bus_request_name()<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l2 level1 lfo3"><![if !supportLists]><span style="color:#0070C0"><span style="mso-list:Ignore">3.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#0070C0">dbus_connection_register_object_path()<o:p></o:p></span></p>
<p class="MsoListParagraph" style="text-indent:-.25in;mso-list:l2 level1 lfo3"><![if !supportLists]><span style="color:#0070C0"><span style="mso-list:Ignore">4.<span style="font:7.0pt "Times New Roman"">      
</span></span></span><![endif]><span style="color:#0070C0">dbus_connection_read_write_dispatch()<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.25in"><o:p> </o:p></p>
<p class="MsoNormal">In message_handler, if signal_handler() is called to send the reply in the this function, In Dbus_send.c the caller could get the reply correctly. But if the reply is sent asynchronously in a signal handler,  the reply could not be got
 by the caller.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:#0070C0">static DBusHandlerResult  message_handler (DBusConnection *connection, DBusMessage *message, void *user_data) 
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0"> {  <o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                dmsg  = message;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                dconn = connection;      
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                <o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">#if 1<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:red">                //reply cannot be got by sender when reply is sent in a signal handler.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                printf("Create signal\n");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                incb = 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                signal(SIGALRM, sigHandler);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                printf("Start timer \n");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                alarm(1);             
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                printf("Increase the reference\n");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                dbus_connection_ref(connection);  
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                dbus_message_ref(message);                 
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">#else<o:p></o:p></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="color:red">// it is ok to send the reply here.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                signal_handler();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">#endif   <o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">                return DBUS_HANDLER_RESULT_HANDLED;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#0070C0"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:black">The two file is attached, could you help check what’s wrong with it? Thanks.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:black">Best regards<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black">Fei Zheng<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"><o:p> </o:p></span></p>
</div>
<br><br>
<SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial, Helvetica, sans-serif">Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom<br>More information can be found at <a href=http://www.csr.com>www.csr.com</a>. Follow CSR on Twitter at <a href=http://twitter.com/CSR_PLC>http://twitter.com/CSR_PLC</a> and read our blog at <a href=http://www.csr.com/blog>www.csr.com/blog</a></SPAN>
</body>
</html>