<div dir="ltr">2008/9/26 Havoc Pennington <span dir="ltr">&lt;<a href="mailto:hp@pobox.com">hp@pobox.com</a>&gt;</span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br>
<div class="Ih2E3d"><br>
On Thu, Sep 25, 2008 at 4:02 AM, jim harvey &lt;<a href="mailto:jimharvy@gmail.com">jimharvy@gmail.com</a>&gt; wrote:<br>
&gt; i&#39;ve currently removed the use of both functions (set_dispatch_status and<br>
&gt; set_wakeup_main) and i&#39;m using the<br>
&gt; my_wakeup_main() function (which i&#39;ve written as you said) to wake up the<br>
&gt; main loop in case a new timeout/watch is toggled/added.<br>
&gt; i use this setup and dispatch in the mainloop while DATA_REMAINS.<br>
&gt; in this use case, is there need for any of the notifications (dispatch<br>
&gt; status change or wakeup main)?<br>
<br>
</div>I would not expect that a watch is guaranteed to be toggled or<br>
added/removed in all cases that there may now be stuff to dispatch,<br>
for example the main socket read watch is never toggled or removed<br>
afaik until the connection is closed.<br>
<br>
iirc dispatch status function was added because in some cases messages<br>
could appear in the incoming queue even though dbus_watch_handle()<br>
hadn&#39;t been called. Originally you were supposed to just always<br>
dispatch after handling a watch. I don&#39;t remember what the cases are.<br>
One example might be a timeout expiring resulting in a synthetic error<br>
message created on client side.<br>
<br>
An example given in the reference docs for wakeup main is that if a<br>
message is queued for writing but can&#39;t be written immediately, the<br>
main loop has to be kicked awake to add the write fd to its poll(). In<br>
this case the watch probably does get toggled.</blockquote><div><br>for now my program is working fine (as far as i can tell) without making use of these 2 callbacks (wakeup_main, distpatch_status).<br>i&#39;m worried about the successive wakeups the mainloop will have to do, since usually both <br>
these callbacks are called on every incoming message (i havent checked outgoing).<br>concerning the sending of a message from another thread - i think a more elegant solution would be to use an internal function like:<br>
<br>send_msg(conn,msg)<br>{<br>&nbsp;&nbsp; dbus_connection_send(conn,msg,0);<br>&nbsp;&nbsp; my_wakeup_mainloop();<br>}<br><br>Now the DBusWatches + watch_add/watch_toggle handle incoming messages wakeup and i manually handle outgoing messages wakeup. <br>
is there still reason to implement the dispatch functions?<br>&nbsp;</div>Regards,<br>Jim<br></div><br></div>