summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrent Lloyd <lathiat@bur.st>2005-08-23 21:50:39 +0000
committerTrent Lloyd <lathiat@bur.st>2005-08-23 21:50:39 +0000
commitbb421d3a4e8e9bbf99c340f5559e6fd76dac5196 (patch)
tree2208fdc99af3fe4f6049e1a2a0fb48d8925eb54d
parent788c921143004a2fdbf3abcba1a59f1693e2e07d (diff)
* avahi-client/
- Create a new function avahi_dbus_bus_get which acts like dbus_bus_get but instead gets a private connection, this solves the bug where you can't have more than one AvahiClient at once because each successive AvahiClient stepped on the DBusWatch handling of the previous due to libdbus liking to recycle its connections. Introduced a new configure option --with-dbus-system-address= if you set this, you likely want it set to unix:path=/some/socket/here The default is /var/run/dbus/system_socket_address, because this path is hard coded into D-BUS itself, and the DBUS_SYSTEM_BUS_ADDRESS environment variable is now supported to change this at runtime which is inline with libdbus. git-svn-id: file:///home/lennart/svn/public/avahi/trunk@432 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
-rw-r--r--avahi-client/Makefile.am2
-rw-r--r--avahi-client/client.c39
-rw-r--r--configure.ac45
3 files changed, 67 insertions, 19 deletions
diff --git a/avahi-client/Makefile.am b/avahi-client/Makefile.am
index cdc4442..75e18a2 100644
--- a/avahi-client/Makefile.am
+++ b/avahi-client/Makefile.am
@@ -39,7 +39,7 @@ libavahi_client_la_SOURCES = \
browser.c \
resolver.c
-libavahi_client_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS)
+libavahi_client_la_CFLAGS = $(AM_CFLAGS) $(DBUS_CFLAGS) -DDBUS_SYSTEM_BUS_DEFAULT_ADDRESS=\"$(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS)\"
libavahi_client_la_LIBADD = $(AM_LDADD) $(DBUS_LIBS) ../avahi-common/libavahi-common.la ../avahi-common/libdbus-common-pic.la
libavahi_client_la_LDFLAGS = $(AM_LDFLAGS) -export-dynamic -version-info 1:0:1
diff --git a/avahi-client/client.c b/avahi-client/client.c
index bb623c0..27f7462 100644
--- a/avahi-client/client.c
+++ b/avahi-client/client.c
@@ -232,6 +232,43 @@ fail:
return e;
}
+/* This function acts like dbus_bus_get but creates a private
+ * connection instead */
+static DBusConnection*
+avahi_dbus_bus_get (DBusBusType type, DBusError *error)
+{
+ DBusConnection *conn;
+ char *env_addr;
+
+ env_addr = getenv ("DBUS_SYSTEM_BUS_ADDRESS");
+
+ if (env_addr == NULL || (strcmp (env_addr, "") == 0))
+ {
+ env_addr = DBUS_SYSTEM_BUS_DEFAULT_ADDRESS;
+ }
+
+ conn = dbus_connection_open_private (env_addr, error);
+
+ if (!conn)
+ {
+ printf ("Failed to open private connection: %s\n", error->message);
+ return NULL;
+ }
+
+ dbus_connection_set_exit_on_disconnect (conn, TRUE);
+
+ if (!dbus_bus_register (conn, error))
+ {
+ printf ("Failed to register connection\n");
+ dbus_connection_close (conn);
+ dbus_connection_unref (conn);
+
+ return NULL;
+ }
+
+ return conn;
+}
+
AvahiClient *avahi_client_new(const AvahiPoll *poll_api, AvahiClientCallback callback, void *userdata, int *ret_error) {
AvahiClient *client = NULL;
DBusError error;
@@ -261,7 +298,7 @@ AvahiClient *avahi_client_new(const AvahiPoll *poll_api, AvahiClientCallback cal
AVAHI_LLIST_HEAD_INIT(AvahiServiceTypeBrowser, client->service_type_browsers);
AVAHI_LLIST_HEAD_INIT(AvahiServiceResolver, client->service_resolvers);
- if (!(client->bus = dbus_bus_get(DBUS_BUS_SYSTEM, &error)) ||
+ if (!(client->bus = avahi_dbus_bus_get(DBUS_BUS_SYSTEM, &error)) ||
dbus_error_is_set (&error))
goto fail;
diff --git a/configure.ac b/configure.ac
index 2eca925..d53dc76 100644
--- a/configure.ac
+++ b/configure.ac
@@ -184,8 +184,8 @@ if test "x$HAVE_GTK" = "xyes" ; then
AC_SUBST(GLADE20_CFLAGS)
AC_SUBST(GLADE20_LIBS)
- interfacesdir="${datadir}/${PACKAGE}/interfaces/"
- AC_SUBST(interfacesdir)
+ interfacesdir="${datadir}/${PACKAGE}/interfaces/"
+ AC_SUBST(interfacesdir)
fi
AM_CONDITIONAL(HAVE_GTK, test "x$HAVE_GTK" = "xyes")
@@ -202,21 +202,31 @@ AC_ARG_ENABLE(dbus,
[HAVE_DBUS=yes])
AC_ARG_WITH(dbus-sys, AS_HELP_STRING([--with-dbus-sys=<dir>], [where D-BUS system.d directory is]))
+AC_ARG_WITH(dbus-system-socket, AS_HELP_STRING([--with-dbus-system-address=<address>], [where the dbus system socket is, you probably want to put unix:path= at the start]))
if test "x$HAVE_DBUS" = "xyes" ; then
- AC_DEFINE(HAVE_DBUS, 1, [Whether we have D-BUS or not])
+ AC_DEFINE(HAVE_DBUS, 1, [Whether we have D-BUS or not])
PKG_CHECK_MODULES(DBUS, [ dbus-1 >= 0.30 ])
DBUS_CFLAGS="$DBUS_CFLAGS -DDBUS_API_SUBJECT_TO_CHANGE"
AC_SUBST(DBUS_CFLAGS)
- AC_SUBST(DBUS_LIBS)
-
- if ! test -z "$with_dbus_sys" ; then
- DBUS_SYS_DIR="$with_dbus_sys"
- else
- DBUS_SYS_DIR="${sysconfdir}/dbus-1/system.d"
- fi
- AC_SUBST(DBUS_SYS_DIR)
+ AC_SUBST(DBUS_LIBS)
+
+ if ! test -z "$with_dbus_sys" ; then
+ DBUS_SYS_DIR="$with_dbus_sys"
+ else
+ DBUS_SYS_DIR="${sysconfdir}/dbus-1/system.d"
+ fi
+ AC_SUBST(DBUS_SYS_DIR)
+
+ if ! test -z "$with_dbus_system_address" ; then
+ DBUS_SYSTEM_BUS_DEFAULT_ADDRESS="$with_dbus_system_address"
+ else
+ # Note this default path is hardcoded in D-BUS and should
+ # not use $localstatedir
+ DBUS_SYSTEM_BUS_DEFAULT_ADDRESS="unix:path=/var/run/dbus/system_bus_socket"
+ fi
+ AC_SUBST(DBUS_SYSTEM_BUS_DEFAULT_ADDRESS)
fi
AM_CONDITIONAL(HAVE_DBUS, test "x$HAVE_DBUS" = "xyes")
@@ -265,12 +275,12 @@ AM_CONDITIONAL(HAVE_LIBDAEMON, test "x$HAVE_LIBDAEMON" = "xyes")
# Python stuff
#
AC_ARG_ENABLE(python,
- AS_HELP_STRING([--disable-python], [Disable scripts that depends on python]),
- [case "${enableval}" in
- yes) HAVE_PYTHON=yes ;;
- no) HAVE_PYTHON=no ;;
- *) AC_MSG_ERROR([bad value ${enableval} for --enable-python]) ;;
- esac],[HAVE_PYTHON=yes])
+ AS_HELP_STRING([--disable-python], [Disable scripts that depends on python]),
+ [case "${enableval}" in
+ yes) HAVE_PYTHON=yes ;;
+ no) HAVE_PYTHON=no ;;
+ *) AC_MSG_ERROR([bad value ${enableval} for --enable-python]) ;;
+ esac],[HAVE_PYTHON=yes])
if test "x$HAVE_PYTHON" = "xyes" ; then
AM_PATH_PYTHON([2.4])
@@ -380,6 +390,7 @@ echo "
sysconfdir: ${sysconfdir}
dbus-1 system.d dir: ${DBUS_SYS_DIR}
dbus-1 version: `pkg-config dbus-1 --modversion`
+ dbus-1 system socket ${DBUS_SYSTEM_BUS_DEFAULT_ADDRESS}
compiler: ${CC}
cflags: ${CFLAGS}
Enable GLIB: ${HAVE_GLIB}