Hi all,<br><br>I have a thread that listens for dbus signals like this by selecting on the socket. I have a filter function set also.<br><br>&nbsp;while(1)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retVal = select(socketfd+1, &amp;readSet, NULL, NULL, NULL); // this thread blocks here
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbus_connection_read_write_dispatch (conn, 0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dstatus = dbus_connection_get_dispatch_status (conn);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (dstatus == DBUS_DISPATCH_DATA_REMAINS)&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbus_connection_read_write_dispatch (conn, 0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dstatus = dbus_connection_get_dispatch_status (conn);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; }<br><br>Seems to work ok most of the time, but i saw that in one case filter func was called twice with a signal that was sent once. I do have a check&nbsp; for this particular signal in the filterfunc.
<br><br>The problem seems to be with me returning
DBUS_HANDLER_RESULT_NOT_YET_HANDLED in the filter func! Atleast the problem went
away when i changed it to HANDLED.<br><br>Questions:<br><br>How is NOT_YET_HANDLED supposed to work?<br><br>1.&nbsp; It should not call the same recv function again if&nbsp; it already&nbsp; returned NOT_YET _HANDLED. Correct?<br><br>2.&nbsp; If a signal is sent out and 2 process are listening for it, if one process handles the signal and return HANDLED will the other process still get the signal?
<br><br>3. Or is the problem how i call the read_write_dispatch() in the above loop?<br><br>Unrelated to the above problem,<br>I read in one of the email threads here that if this kind of stuff is done, you need to do dbus_threads_init_default(). Is there a corresponding deinit() when the thread is killed?
<br><br>Thank you,<br>K<br>