summaryrefslogtreecommitdiffstats
path: root/bus/bus.c
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2005-11-14 20:51:25 +0000
committerDavid Zeuthen <davidz@redhat.com>2005-11-14 20:51:25 +0000
commit5e948ff7cdc7e3023d53d06ad35c85be304f36c9 (patch)
tree616bd786cf6411ebfda1f59e8cc590017506eb8c /bus/bus.c
parent7b9236f2aef06b203acc019592cd102672427633 (diff)
2005-11-14 David Zeuthen <davidz@redhat.com>
Patch from Timo Hoenig <thoenig@suse.de>. * bus/bus.c: I've recently investigated why the automatic reload of configuration files does not work as expected. Currently, reloading configuration files does only work when running dbus-daemon with --nodaemon. If we are running as daemon we're hitting a dnotify bug once we fork the process. We're initializing the dnotify fds before calling fork(). Once the child process forked it does still have the fds (and they still show up in /proc/`pidof dbus-daemon`/fd/) but we're not getting SIGIO as changes are made to the configuration files. The attached patch moves the initialization of the dnotify fds to process_config_postinit(). This is safe for all current code paths and solves the dnotify disfunction. If we're running dbus-daemon as daemon the fds for dnotify are now being initialized after fork() for the child process. * configure.in: The current configure.in check for dnotify probes 'x$target_os' for being 'xlinux-gnu'. I've changed the check to match for 'xlinux', too. Additionally I have adapted the configure option's style to match with the others.
Diffstat (limited to 'bus/bus.c')
-rw-r--r--bus/bus.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/bus/bus.c b/bus/bus.c
index de880cfe..48aae8e8 100644
--- a/bus/bus.c
+++ b/bus/bus.c
@@ -479,15 +479,11 @@ process_config_every_time (BusContext *context,
goto failed;
}
- /* Drop existing conf-dir watches (if applicable) and watch all conf directories */
+ /* Drop existing conf-dir watches (if applicable) */
if (is_reload)
bus_drop_all_directory_watches ();
- _dbus_list_foreach (bus_config_parser_get_conf_dirs (parser),
- (DBusForeachFunction) bus_watch_directory,
- NULL);
-
_DBUS_ASSERT_ERROR_IS_CLEAR (error);
retval = TRUE;
@@ -497,9 +493,9 @@ process_config_every_time (BusContext *context,
}
static dbus_bool_t
-process_config_postinit (BusContext *context,
+process_config_postinit (BusContext *context,
BusConfigParser *parser,
- DBusError *error)
+ DBusError *error)
{
DBusHashTable *service_context_table;
@@ -512,6 +508,12 @@ process_config_postinit (BusContext *context,
}
_dbus_hash_table_unref (service_context_table);
+
+ /* Watch all conf directories */
+ _dbus_list_foreach (bus_config_parser_get_conf_dirs (parser),
+ (DBusForeachFunction) bus_watch_directory,
+ NULL);
+
return TRUE;
}