From 480590b90c3966536451d2a2fecc42a66082ed77 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 4 Dec 2013 11:10:06 +0100 Subject: [PATCH] dbus-core: Make dbus-core no longer mutually exclusive with udev With systemd-logind the dbus-core will be used for more then just config, so it should be possible to build it even when using a non dbus dependent config backend. This patch also removes the config_ prefix from the dbus-core symbols. Signed-off-by: Hans de Goede Reviewed-by: Daniel Stone --- config/Makefile.am | 17 +++++------ config/config-backends.h | 30 ++----------------- config/config.c | 18 +++--------- config/dbus-core.c | 28 +++++++++--------- config/hal.c | 7 +++-- configure.ac | 8 +++--- hw/xfree86/common/xf86Init.c | 5 ++++ include/Makefile.am | 2 +- include/dbus-core.h | 56 ++++++++++++++++++++++++++++++++++++ include/dix-config.h.in | 4 +-- 10 files changed, 101 insertions(+), 74 deletions(-) create mode 100644 include/dbus-core.h diff --git a/config/Makefile.am b/config/Makefile.am index 0740e4612..e0f0a8ddf 100644 --- a/config/Makefile.am +++ b/config/Makefile.am @@ -2,12 +2,19 @@ AM_CFLAGS = $(DIX_CFLAGS) noinst_LTLIBRARIES = libconfig.la libconfig_la_SOURCES = config.c config-backends.h +libconfig_la_LIBADD = + +if NEED_DBUS +AM_CFLAGS += $(DBUS_CFLAGS) +libconfig_la_SOURCES += dbus-core.c +libconfig_la_LIBADD += $(DBUS_LIBS) +endif if CONFIG_UDEV AM_CFLAGS += $(UDEV_CFLAGS) libconfig_la_SOURCES += udev.c -libconfig_la_LIBADD = $(UDEV_LIBS) +libconfig_la_LIBADD += $(UDEV_LIBS) if XORG xorgconfddir = $(datadir)/X11/$(XF86CONFIGDIR) @@ -16,16 +23,10 @@ endif else -if CONFIG_NEED_DBUS -AM_CFLAGS += $(DBUS_CFLAGS) -libconfig_la_SOURCES += dbus-core.c -libconfig_la_LIBADD = $(DBUS_LIBS) - if CONFIG_HAL AM_CFLAGS += $(HAL_CFLAGS) libconfig_la_SOURCES += hal.c libconfig_la_LIBADD += $(HAL_LIBS) -endif else @@ -33,7 +34,7 @@ if CONFIG_WSCONS libconfig_la_SOURCES += wscons.c endif # CONFIG_WSCONS -endif # CONFIG_NEED_DBUS +endif # !CONFIG_HAL endif # !CONFIG_UDEV diff --git a/config/config-backends.h b/config/config-backends.h index 5a715b399..5f07557b7 100644 --- a/config/config-backends.h +++ b/config/config-backends.h @@ -37,36 +37,10 @@ int config_udev_pre_init(void); int config_udev_init(void); void config_udev_fini(void); void config_udev_odev_probe(config_odev_probe_proc_ptr probe_callback); -#else - -#ifdef CONFIG_NEED_DBUS -#include - -typedef void (*config_dbus_core_connect_hook) (DBusConnection * connection, - void *data); -typedef void (*config_dbus_core_disconnect_hook) (void *data); - -struct config_dbus_core_hook { - config_dbus_core_connect_hook connect; - config_dbus_core_disconnect_hook disconnect; - void *data; - - struct config_dbus_core_hook *next; -}; - -int config_dbus_core_init(void); -void config_dbus_core_fini(void); -int config_dbus_core_add_hook(struct config_dbus_core_hook *hook); -void config_dbus_core_remove_hook(struct config_dbus_core_hook *hook); -#endif - -#ifdef CONFIG_HAL +#elif defined(CONFIG_HAL) int config_hal_init(void); void config_hal_fini(void); -#endif -#endif - -#ifdef CONFIG_WSCONS +#elif defined(CONFIG_WSCONS) int config_wscons_init(void); void config_wscons_fini(void); #endif diff --git a/config/config.c b/config/config.c index 554069f92..760cf193a 100644 --- a/config/config.c +++ b/config/config.c @@ -47,16 +47,9 @@ config_init(void) #ifdef CONFIG_UDEV if (!config_udev_init()) ErrorF("[config] failed to initialise udev\n"); -#elif defined(CONFIG_NEED_DBUS) - if (config_dbus_core_init()) { -#ifdef CONFIG_HAL - if (!config_hal_init()) - ErrorF("[config] failed to initialise HAL\n"); -#endif - } - else { - ErrorF("[config] failed to initialise D-Bus core\n"); - } +#elif defined(CONFIG_HAL) + if (!config_hal_init()) + ErrorF("[config] failed to initialise HAL\n"); #elif defined(CONFIG_WSCONS) if (!config_wscons_init()) ErrorF("[config] failed to initialise wscons\n"); @@ -68,11 +61,8 @@ config_fini(void) { #if defined(CONFIG_UDEV) config_udev_fini(); -#elif defined(CONFIG_NEED_DBUS) -#ifdef CONFIG_HAL +#elif defined(CONFIG_HAL) config_hal_fini(); -#endif - config_dbus_core_fini(); #elif defined(CONFIG_WSCONS) config_wscons_fini(); #endif diff --git a/config/dbus-core.c b/config/dbus-core.c index 768a98454..43d628194 100644 --- a/config/dbus-core.c +++ b/config/dbus-core.c @@ -30,9 +30,9 @@ #include #include -#include "config-backends.h" #include "dix.h" #include "os.h" +#include "dbus-core.h" /* How often to attempt reconnecting when we get booted off the bus. */ #define RECONNECT_DELAY (10 * 1000) /* in ms */ @@ -41,7 +41,7 @@ struct dbus_core_info { int fd; DBusConnection *connection; OsTimerPtr timer; - struct config_dbus_core_hook *hooks; + struct dbus_core_hook *hooks; }; static struct dbus_core_info bus_info; @@ -74,7 +74,7 @@ block_handler(void *data, struct timeval **tv, void *read_mask) static void teardown(void) { - struct config_dbus_core_hook *hook; + struct dbus_core_hook *hook; if (bus_info.timer) { TimerFree(bus_info.timer); @@ -112,7 +112,7 @@ message_filter(DBusConnection * connection, DBusMessage * message, void *data) * reconnect immediately (assuming it's just a restart). The * connection isn't valid at this point, so throw it out immediately. */ if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL, "Disconnected")) { - DebugF("[config/dbus-core] disconnected from bus\n"); + DebugF("[dbus-core] disconnected from bus\n"); bus_info.connection = NULL; teardown(); @@ -136,12 +136,12 @@ static int connect_to_bus(void) { DBusError error; - struct config_dbus_core_hook *hook; + struct dbus_core_hook *hook; dbus_error_init(&error); bus_info.connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error); if (!bus_info.connection || dbus_error_is_set(&error)) { - DebugF("[config/dbus-core] error connecting to system bus: %s (%s)\n", + LogMessage(X_ERROR, "dbus-core: error connecting to system bus: %s (%s)\n", error.name, error.message); goto err_begin; } @@ -150,13 +150,13 @@ connect_to_bus(void) dbus_connection_set_exit_on_disconnect(bus_info.connection, FALSE); if (!dbus_connection_get_unix_fd(bus_info.connection, &bus_info.fd)) { - ErrorF("[config/dbus-core] couldn't get fd for system bus\n"); + ErrorF("[dbus-core] couldn't get fd for system bus\n"); goto err_unref; } if (!dbus_connection_add_filter(bus_info.connection, message_filter, &bus_info, NULL)) { - ErrorF("[config/dbus-core] couldn't add filter: %s (%s)\n", error.name, + ErrorF("[dbus-core] couldn't add filter: %s (%s)\n", error.name, error.message); goto err_fd; } @@ -198,9 +198,9 @@ reconnect_timer(OsTimerPtr timer, CARD32 time, void *arg) } int -config_dbus_core_add_hook(struct config_dbus_core_hook *hook) +dbus_core_add_hook(struct dbus_core_hook *hook) { - struct config_dbus_core_hook **prev; + struct dbus_core_hook **prev; for (prev = &bus_info.hooks; *prev; prev = &(*prev)->next); @@ -215,9 +215,9 @@ config_dbus_core_add_hook(struct config_dbus_core_hook *hook) } void -config_dbus_core_remove_hook(struct config_dbus_core_hook *hook) +dbus_core_remove_hook(struct dbus_core_hook *hook) { - struct config_dbus_core_hook **prev; + struct dbus_core_hook **prev; for (prev = &bus_info.hooks; *prev; prev = &(*prev)->next) { if (*prev == hook) { @@ -228,7 +228,7 @@ config_dbus_core_remove_hook(struct config_dbus_core_hook *hook) } int -config_dbus_core_init(void) +dbus_core_init(void) { memset(&bus_info, 0, sizeof(bus_info)); bus_info.fd = -1; @@ -240,7 +240,7 @@ config_dbus_core_init(void) } void -config_dbus_core_fini(void) +dbus_core_fini(void) { teardown(); } diff --git a/config/hal.c b/config/hal.c index 2ead556b0..94cb6e7cd 100644 --- a/config/hal.c +++ b/config/hal.c @@ -33,6 +33,7 @@ #include #include +#include "dbus-core.h" #include "input.h" #include "inputstr.h" #include "hotplug.h" @@ -631,7 +632,7 @@ connect_hook(DBusConnection * connection, void *data) static struct config_hal_info hal_info; -static struct config_dbus_core_hook hook = { +static struct dbus_core_hook hook = { .connect = connect_hook, .disconnect = disconnect_hook, .data = &hal_info, @@ -644,7 +645,7 @@ config_hal_init(void) hal_info.system_bus = NULL; hal_info.hal_ctx = NULL; - if (!config_dbus_core_add_hook(&hook)) { + if (!dbus_core_add_hook(&hook)) { LogMessage(X_ERROR, "config/hal: failed to add D-Bus hook\n"); return 0; } @@ -658,5 +659,5 @@ config_hal_init(void) void config_hal_fini(void) { - config_dbus_core_remove_hook(&hook); + dbus_core_remove_hook(&hook); } diff --git a/configure.ac b/configure.ac index 15edd3c4e..c6764f5a8 100644 --- a/configure.ac +++ b/configure.ac @@ -897,14 +897,14 @@ if test "x$CONFIG_HAL" = xyes; then fi AC_DEFINE(CONFIG_HAL, 1, [Use the HAL hotplug API]) - CONFIG_NEED_DBUS="yes" + NEED_DBUS="yes" fi AM_CONDITIONAL(CONFIG_HAL, [test "x$CONFIG_HAL" = xyes]) -if test "x$CONFIG_NEED_DBUS" = xyes; then - AC_DEFINE(CONFIG_NEED_DBUS, 1, [Use D-Bus for input hotplug]) +if test "x$NEED_DBUS" = xyes; then + AC_DEFINE(NEED_DBUS, 1, [Enable D-Bus core]) fi -AM_CONDITIONAL(CONFIG_NEED_DBUS, [test "x$CONFIG_NEED_DBUS" = xyes]) +AM_CONDITIONAL(NEED_DBUS, [test "x$NEED_DBUS" = xyes]) if test "x$CONFIG_WSCONS" = xauto; then case $host_os in diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c index 952bf3793..ff4d38f28 100644 --- a/hw/xfree86/common/xf86Init.c +++ b/hw/xfree86/common/xf86Init.c @@ -53,6 +53,7 @@ #include "scrnintstr.h" #include "site.h" #include "mi.h" +#include "dbus-core.h" #include "compiler.h" @@ -456,6 +457,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv) if (xf86DoShowOptions) DoShowOptions(); + dbus_core_init(); + /* Do a general bus probe. This will be a PCI probe for x86 platforms */ xf86BusProbe(); @@ -1059,6 +1062,8 @@ ddxGiveUp(enum ExitCode error) if (xorgHWOpenConsole) xf86CloseConsole(); + dbus_core_fini(); + xf86CloseLog(error); /* If an unexpected signal was caught, dump a core for debugging */ diff --git a/include/Makefile.am b/include/Makefile.am index 93d8616f2..fa6da00ec 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -68,7 +68,7 @@ endif AM_CFLAGS = $(DIX_CFLAGS) EXTRA_DIST = \ - busfault.h \ + busfault.h dbus-core.h \ dix-config-apple-verbatim.h \ dixfontstubs.h eventconvert.h eventstr.h inpututils.h \ protocol-versions.h \ diff --git a/include/dbus-core.h b/include/dbus-core.h new file mode 100644 index 000000000..b2d6d1b9e --- /dev/null +++ b/include/dbus-core.h @@ -0,0 +1,56 @@ +/* + * Copyright © 2013 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + * Author: Hans de Goede + */ + +#ifndef DBUS_CORE_H +#define DBUS_CORE_H + +#ifdef NEED_DBUS +typedef struct DBusConnection DBusConnection; + +typedef void (*dbus_core_connect_hook) (DBusConnection * connection, + void *data); +typedef void (*dbus_core_disconnect_hook) (void *data); + +struct dbus_core_hook { + dbus_core_connect_hook connect; + dbus_core_disconnect_hook disconnect; + void *data; + + struct dbus_core_hook *next; +}; + +int dbus_core_init(void); +void dbus_core_fini(void); +int dbus_core_add_hook(struct dbus_core_hook *hook); +void dbus_core_remove_hook(struct dbus_core_hook *hook); + +#else + +#define dbus_core_init() +#define dbus_core_fini() + +#endif + +#endif diff --git a/include/dix-config.h.in b/include/dix-config.h.in index 8ffb53e50..7c77956b1 100644 --- a/include/dix-config.h.in +++ b/include/dix-config.h.in @@ -414,8 +414,8 @@ /* Use udev_enumerate_add_match_tag() */ #undef HAVE_UDEV_ENUMERATE_ADD_MATCH_TAG -/* Use D-Bus for input hotplug */ -#undef CONFIG_NEED_DBUS +/* Enable D-Bus core */ +#undef NEED_DBUS /* Support HAL for hotplug */ #undef CONFIG_HAL