[avahi] DBUS Integration and Browsing Services
Trent Lloyd
lathiat at bur.st
Wed Oct 14 03:14:28 PDT 2015
Hi Glenn,
Thanks for your feedback. The github.com/lathiat/avahi repository is actually “official", and not a fork as such.
Your analysis is correct, per the ticket this issue was recently raised by someone else for use with Python as well. It’s a deficiency in the current D-BUS API.
This works fine for us in libavahi-client because we subscribe to all signals from Avahi up front, before any objects are created. This however, does not work for dynamic usage of the D-BUS API with Introspection, such as used with Python. They create the object, and can only then subscribe to it (because it did not exist before). This almost seems like a deficiency in the D-BUS APIs but I guess we have to work with it :-)
I plan to fix this by adding to the D-BUS API, I am told that the “common” fix for this is to add a catch-up command that requests that all messages are re-sent. My main concern with this is that it seems like a race condition in it’s own right, we may send duplicates and with bad timing the client may also get removals for additions they had not yet seen. So I needed to put some more thought into that.
The other fix would be to have a “Start” signal to call after subscribing to the events, however that would break existing applications. But they may well be the best fix, combined with putting that requirement under a new version of the API and to offer both simultaneously.
I would love your feedback on if you have any thoughts and what would best work for your Go binding. I would also love to integrate the go binding into the official tree and releases — please let me know if we can work together on that :-)
Cheers,
Trent
> On 2 Sep 2015, at 3:27 AM, Glenn Martin <lifewarped at yahoo.com> wrote:
>
> It seems the entire problem above is related to a Signal API race, i found some information about on a GitHub fork of the project:
> https://github.com/lathiat/avahi/issues/9 <https://github.com/lathiat/avahi/issues/9> which i think is mirrored in this ticket as well on the formal Avahi website's tracker: http://www.avahi.org/ticket/247 <http://www.avahi.org/ticket/247>
>
> The solution was fairly simple, I simply pre-register for all notifications for a browse object without knowing the path before calling in to existence the Browser object. I can then buffer the results and filter out any that didnt come from my specific instance. This feels a bit messy but it is effective for me at the moment.
>
> I hope this information helps others.
>
> Glenn Martin
> _______________________________________________
> avahi mailing list
> avahi at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/avahi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/avahi/attachments/20151014/93722528/attachment.html>
More information about the avahi
mailing list