diff options
author | Daniel Mack <daniel@zonque.org> | 2015-08-05 17:47:45 +0200 |
---|---|---|
committer | Daniel Mack <daniel@zonque.org> | 2015-08-06 10:14:41 +0200 |
commit | bbc2908635ca3ded9162504683fa126809f0ec14 (patch) | |
tree | d667bb2afaaef914cbc262e3b6e4220325722bbf /src/core/unit.h | |
parent | d5972272d2b725ab6a2789899f8b6c1d2a8113e3 (diff) |
core: dbus: track bus names per unit
Currently, PID1 installs an unfiltered NameOwnerChanged signal match, and
dispatches the signals itself. This does not scale, as right now, PID1
wakes up every time a bus client connects.
To fix this, install individual matches once they are requested by
unit_watch_bus_name(), and remove the watches again through their slot in
unit_unwatch_bus_name().
If the bus is not available during unit_watch_bus_name(), just store
name in the 'watch_bus' hashmap, and let bus_setup_api() do the installing
later.
Diffstat (limited to 'src/core/unit.h')
-rw-r--r-- | src/core/unit.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/core/unit.h b/src/core/unit.h index e60168267f..9df5a7e6fb 100644 --- a/src/core/unit.h +++ b/src/core/unit.h @@ -115,6 +115,9 @@ struct Unit { /* JOB_NOP jobs are special and can be installed without disturbing the real job. */ Job *nop_job; + /* The slot used for watching NameOwnerChanged signals */ + sd_bus_slot *match_bus_slot; + /* Job timeout and action to take */ usec_t job_timeout; FailureAction job_timeout_action; @@ -522,6 +525,7 @@ void unit_unwatch_all_pids(Unit *u); void unit_tidy_watch_pids(Unit *u, pid_t except1, pid_t except2); +int unit_install_bus_match(sd_bus *bus, Unit *u, const char *name); int unit_watch_bus_name(Unit *u, const char *name); void unit_unwatch_bus_name(Unit *u, const char *name); |