You are viewing lathiat

Lathiat's Journal - Avahi [entries|archive|friends|userinfo]
Trent 'Lathiat' Lloyd (トレント)

[ website | lathiat dot net ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Avahi [Aug. 26th, 2005|05:53 am]
Previous Entry Share Next Entry
So the reaction to Avahi 0.1 has been *very* positive, we even got an article on the Front Page of LWN, and it was a very nice article too! Rocking.

We've been working on 0.2, there are quite a few bug fixes that are very important, so we hope to release soon. For the curious the major ones were
* You cannot create more than one AvahiClient at once - turns out that this is not so much our fault but the (IMHO, braindead) behavior of D-BUS. D-BUS recycles conncetions to the server within the same process, so if you connect a second time it just gives you back the same object. While in many situations this may be well and good, in the case of Avahi it is very bad. The reason is that we interface to DBus using "DBusWatch", this allows DBus to tell us about file descriptor to watch, our main loop abstraction interface then watches these FDs. Now to do this, we call a function to the dbus library which sets some state within the DBusConnection, various functions to call etc. Unfortunately this means that if something else is interfacing with the DBusConnection in this way, we will step on its integration and steal it for ourselves. So this happens in two cases, either a second AvahiClient attempts to connect to D-BUS, or another library is using D-BUS. So in both these caes it will break.

To fix this, I've started using a "private" connection with D-BUS, that is not cached, unfortunately this is not ideal as D-BUS doesn't have any way to get the address of the system bus, so we have to guess, and at the moment unless configured otherwise it's set to the default of D-BUS which is mildly hard-coded (although not as much as the source code claims). FUN!

The second major problem we had was a problem in the reflector that caused a big loop of packets to be sent out.. continuously.. and never stop :) This caused my friends ADSL router to fall over while remotely testing Avahi on his network, woops! Turns out that the flood of packets out the routers interface caused it to crash. This was due to the reflector reflecting its own packets, which because of particular concern if there was considerable delay in the packets floating around.

We've also had a few other minor problem, such as
* Typo in avahi-glib.pc
* Potential crasher when resolving non-existant hostnames
* Fix the build on AMD64 - fPIC related.
* Check that rtnetlink.h includes when compiled such -std=c99, unfortunately some kernel headers don't define __u64 with the C99 standard, which turns out to be broken. This showed up in archlinux.
* A bug with AvahiServiceResolvers crashing when using multilpe clients (Somehow, I found this before figuring out the bigger problem with multiple clients. :)
* Allow compilation when configure doesn't know about the distro you run
* Fix a bug with empty string list handling, caused a crash when interacting with MacOS X sometimes

So yeh, it' sbeen fun! Hopefully Avahi 0.2 will come out maybe this weekend, early next week. Then I am working on FreeBSD, OpenBSD, NetBSD, Solaris and Darwin/MacOSX support for 0.3!