Re: Synchronous method in asynchronous signal callback

Marco Bascetta <[email protected]>
Newsgroups gmane.comp.freedesktop.dbus
Message-ID <[email protected]>
On 14/05/15 19:10, Marco Bascetta wrote:
>> dbus-glib is deprecated and should not be used, but
>> http://cgit.freedesktop.org/dbus/dbus-glib/tree/dbus/dbus-gmain.c does
>> provide an example of a complete main loop hookup including all the
>> necessary glue:
>>
>> * watches
>> * timeouts
>> * separate read and write watches for the same fd (yes this is silly,
>>    but the mainloop integration glue API doesn't give us a way to signal
>>    that the wants-read/wants-write state has changed, and I don't think
>>    we can assume that every existing implementation re-polls the flags
>>    when a watch is disabled and re-enabled)
>> * dbus_connection_set_wakeup_main_function(), which I think might be
>>    the one you're missing?
>>
>> [1] http://smcv.pseudorandom.co.uk/2008/11/nonblocking/
>> [2] e.g. http://skarnet.org/software/skalibs/libstddjb/selfpipe.html
> I'll try to follow the dbus-gmain.c implementation and your advices 
> and I let you know.
>
> Instead, I already saw dbus_connection_set_wakeup_main_function and it 
> wasn't useful.

Hi,
I extended my implementation with your suggestion based on dbus-gmain.c 
(also removing force_dispatch flag).
There wasn't any improvement in my issue, but I have to change my 
opinion about dbus_connection_set_wakeup_main_function.
I thought that would serve to wake up the poll in case of multithread or 
blocking calls, instead I noticed that it's always called for each new 
event (signals, method replies, etc.);
so I decided to call my (refactored) "dispach_func" both when the watch 
and when an fd associated to dbus_connection_set_wakeup_main_function 
are triggered.
In this way I don't see any delay in signal receiving.

Probably is the worst solution that I could find, but seems to work well.

Do you believe that there may be hidden issues?

Thanks for your support.

-- 
Marco Bascetta - Sadel SpA
Software Development
Via Serenari 1, Castel Maggiore (BO)

_______________________________________________
dbus mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/dbus
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.