diff options
author | Colin Walters <walters@verbum.org> | 2010-02-18 15:33:28 -0500 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2010-02-18 15:33:28 -0500 |
commit | 9c90fcd2dc4b1b7d818a35ef43d4686052902f59 (patch) | |
tree | 52a6fb77f71a419756c4458f9c66ec08c8dac756 /bus/bus.c | |
parent | 8ca10fd4ded0383e597b17ec315b955515e19a78 (diff) | |
download | dbus-9c90fcd2dc4b1b7d818a35ef43d4686052902f59.tar.gz |
Monitor service directories for changes
It's not expected to have to manually SIGHUP the bus after installing
a new .service file. Since our directory monitoring is already set
up to queue a full reload which includes service activation, simply
monitor the servicedirs too.
https://bugs.freedesktop.org/show_bug.cgi?id=23846
Diffstat (limited to 'bus/bus.c')
-rw-r--r-- | bus/bus.c | 44 |
1 files changed, 42 insertions, 2 deletions
@@ -529,11 +529,39 @@ process_config_every_time (BusContext *context, } static dbus_bool_t +list_concat_new (DBusList **a, + DBusList **b, + DBusList **result) +{ + DBusList *link; + + *result = NULL; + + link = _dbus_list_get_first_link (a); + for (link = _dbus_list_get_first_link (a); link; link = _dbus_list_get_next_link (a, link)) + { + if (!_dbus_list_append (result, link->data)) + goto oom; + } + for (link = _dbus_list_get_first_link (b); link; link = _dbus_list_get_next_link (b, link)) + { + if (!_dbus_list_append (result, link->data)) + goto oom; + } + + return TRUE; +oom: + _dbus_list_clear (result); + return FALSE; +} + +static dbus_bool_t process_config_postinit (BusContext *context, BusConfigParser *parser, DBusError *error) { DBusHashTable *service_context_table; + DBusList *watched_dirs = NULL; service_context_table = bus_config_parser_steal_service_context_table (parser); if (!bus_registry_set_service_context_table (context->registry, @@ -545,8 +573,20 @@ process_config_postinit (BusContext *context, _dbus_hash_table_unref (service_context_table); - /* Watch all conf directories */ - bus_set_watched_dirs (context, bus_config_parser_get_conf_dirs (parser)); + /* We need to monitor both the configuration directories and directories + * containing .service files. + */ + if (!list_concat_new (bus_config_parser_get_conf_dirs (parser), + bus_config_parser_get_service_dirs (parser), + &watched_dirs)) + { + BUS_SET_OOM (error); + return FALSE; + } + + bus_set_watched_dirs (context, &watched_dirs); + + _dbus_list_clear (&watched_dirs); return TRUE; } |