[systemd-devel] [systemd-commits] 5 commits - TODO src/core src/libsystemd-bus src/login src/machine src/systemd
Zbigniew Jędrzejewski-Szmek
zbyszek at in.waw.pl
Sat Dec 21 19:10:14 PST 2013
On Sat, Dec 21, 2013 at 06:54:53PM -0800, Lennart Poettering wrote:
> TODO | 12 +
> src/core/automount.c | 1
> src/core/busname.c | 1
> src/core/dbus-automount.c | 9 -
> src/core/dbus-automount.h | 1
> src/core/dbus-busname.c | 7 -
> src/core/dbus-busname.h | 1
> src/core/dbus-cgroup.c | 22 +--
> src/core/dbus-device.c | 5
> src/core/dbus-device.h | 1
> src/core/dbus-execute.c | 118 ++++++++---------
> src/core/dbus-job.c | 6
> src/core/dbus-kill.c | 8 -
> src/core/dbus-manager.c | 46 +++---
> src/core/dbus-mount.c | 21 ---
> src/core/dbus-mount.h | 1
> src/core/dbus-path.c | 13 -
> src/core/dbus-path.h | 1
> src/core/dbus-scope.c | 7 -
> src/core/dbus-scope.h | 1
> src/core/dbus-service.c | 59 +++-----
> src/core/dbus-service.h | 1
> src/core/dbus-snapshot.c | 2
> src/core/dbus-socket.c | 76 ++++-------
> src/core/dbus-socket.h | 1
> src/core/dbus-swap.c | 14 --
> src/core/dbus-swap.h | 1
> src/core/dbus-timer.c | 15 --
> src/core/dbus-timer.h | 1
> src/core/dbus-unit.c | 126 ++++++++----------
> src/core/device.c | 1
> src/core/mount.c | 1
> src/core/path.c | 3
> src/core/scope.c | 1
> src/core/service.c | 1
> src/core/socket.c | 1
> src/core/swap.c | 1
> src/core/timer.c | 1
> src/core/unit.h | 3
> src/libsystemd-bus/bus-introspect.c | 8 -
> src/libsystemd-bus/bus-objects.c | 212 ++++++++++++++++++++-----------
> src/libsystemd-bus/test-bus-introspect.c | 3
> src/libsystemd-bus/test-bus-objects.c | 27 +++
> src/login/logind-dbus.c | 22 +--
> src/login/logind-seat-dbus.c | 6
> src/login/logind-session-dbus.c | 35 ++---
> src/login/logind-user-dbus.c | 17 +-
> src/machine/machine-dbus.c | 22 +--
> src/systemd/sd-bus-vtable.h | 15 +-
> 49 files changed, 481 insertions(+), 477 deletions(-)
>
> New commits:
> commit bee7e928990fd8a0c5909c2022a2b9eede557c81
> Author: Lennart Poettering <lennart at poettering.net>
> Date: Sun Dec 22 03:50:30 2013 +0100
>
> update TODO
>
> diff --git a/TODO b/TODO
> index de5738e..3704445 100644
> --- a/TODO
> +++ b/TODO
> @@ -113,14 +113,13 @@ Features:
> * libsystemd-bus:
> - when kdbus doesn't take our message without memfds, try again with memfds
> - implement monitor logic
> - - when triggering property change events, allow a NULL strv indicate that all properties listed as such are send out as changed
> - see if we can drop more message validation on the sending side
> - - support "const" properties as flag
> - add API to clone sd_bus_message objects
> - SD_BUS_COMMENT() macro for inclusion in vtables, syntax inspired by gdbus
> - systemd-bus-proxyd needs to synthesize NameLost/NameAcquired
> + - systemd-bus-proxyd needs to enforce good old XML policy
> + - upload minimal kdbus policy into the kernel at boot
> - kdbus: matches against source or destination pids for an "strace -p"-like feel. Problem: The PID info needs to be available in userspace too...
> - - kdbus: we need a way to figure out whether there's currently an activator for a name that is already activated
> - longer term:
> * priority queues
> * priority inheritance
> @@ -129,7 +128,7 @@ Features:
> - kdbus mapping
> - NameLost/NameAcquired obsolete
> - GVariant
> - - "const" properties
> + - "const" properties (posted)
>
> * sd-event
> - allow multiple signal handlers per signal?
>
> commit aec8de63b14a93b91b85dc15bf879604352fbbe1
> Author: Lennart Poettering <lennart at poettering.net>
> Date: Sun Dec 22 03:43:03 2013 +0100
>
> core: no need to list properties for PropertiesChanged messages anymore
>
> Since the vtable includes this information anyway, let's just use that
>
> diff --git a/src/core/automount.c b/src/core/automount.c
> index c6e0a74..c44521c 100644
> --- a/src/core/automount.c
> +++ b/src/core/automount.c
> @@ -874,7 +874,6 @@ const UnitVTable automount_vtable = {
>
> .bus_interface = "org.freedesktop.systemd1.Automount",
> .bus_vtable = bus_automount_vtable,
> - .bus_changing_properties = bus_automount_changing_properties,
>
> .shutdown = automount_shutdown,
>
> diff --git a/src/core/busname.c b/src/core/busname.c
> index 034e5f6..9b6bf07 100644
> --- a/src/core/busname.c
> +++ b/src/core/busname.c
> @@ -584,7 +584,6 @@ const UnitVTable busname_vtable = {
>
> .bus_interface = "org.freedesktop.systemd1.BusName",
> .bus_vtable = bus_busname_vtable,
> - .bus_changing_properties = bus_busname_changing_properties,
>
> .status_message_formats = {
> .finished_start_job = {
> diff --git a/src/core/dbus-automount.c b/src/core/dbus-automount.c
> index 8559aed..b2a510a 100644
> --- a/src/core/dbus-automount.c
> +++ b/src/core/dbus-automount.c
> @@ -34,8 +34,3 @@ const sd_bus_vtable bus_automount_vtable[] = {
> SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Automount, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
> SD_BUS_VTABLE_END
> };
> -
> -const char* const bus_automount_changing_properties[] = {
> - "Result",
> - NULL
> -};
> diff --git a/src/core/dbus-automount.h b/src/core/dbus-automount.h
> index 0b96183..1bec953 100644
> --- a/src/core/dbus-automount.h
> +++ b/src/core/dbus-automount.h
> @@ -24,4 +24,3 @@
> #include "sd-bus.h"
>
> extern const sd_bus_vtable bus_automount_vtable[];
> -extern const char* const bus_automount_changing_properties[];
> diff --git a/src/core/dbus-busname.c b/src/core/dbus-busname.c
> index 9f94bf1..854491b 100644
> --- a/src/core/dbus-busname.c
> +++ b/src/core/dbus-busname.c
> @@ -33,8 +33,3 @@ const sd_bus_vtable bus_busname_vtable[] = {
> SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(BusName, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
> SD_BUS_VTABLE_END
> };
> -
> -const char* const bus_busname_changing_properties[] = {
> - "Result",
> - NULL
> -};
> diff --git a/src/core/dbus-busname.h b/src/core/dbus-busname.h
> index 3a29317..b5eed37 100644
> --- a/src/core/dbus-busname.h
> +++ b/src/core/dbus-busname.h
> @@ -25,4 +25,3 @@
> #include "unit.h"
>
> extern const sd_bus_vtable bus_busname_vtable[];
> -extern const char* const bus_busname_changing_properties[];
> diff --git a/src/core/dbus-device.c b/src/core/dbus-device.c
> index 621bab0..f556536 100644
> --- a/src/core/dbus-device.c
> +++ b/src/core/dbus-device.c
> @@ -29,8 +29,3 @@ const sd_bus_vtable bus_device_vtable[] = {
> SD_BUS_PROPERTY("SysFSPath", "s", NULL, offsetof(Device, sysfs), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
> SD_BUS_VTABLE_END
> };
> -
> -const char* const bus_device_changing_properties[] = {
> - "SysFSPath",
> - NULL
> -};
> diff --git a/src/core/dbus-device.h b/src/core/dbus-device.h
> index f248c28..4aff226 100644
> --- a/src/core/dbus-device.h
> +++ b/src/core/dbus-device.h
> @@ -25,4 +25,3 @@
> #include "unit.h"
>
> extern const sd_bus_vtable bus_device_vtable[];
> -extern const char* const bus_device_changing_properties[];
> diff --git a/src/core/dbus-mount.c b/src/core/dbus-mount.c
> index 3b58808..28f0e90 100644
> --- a/src/core/dbus-mount.c
> +++ b/src/core/dbus-mount.c
> @@ -124,15 +124,6 @@ const sd_bus_vtable bus_mount_vtable[] = {
> SD_BUS_VTABLE_END
> };
>
> -const char * const bus_mount_changing_properties[] = {
> - "What",
> - "Options",
> - "Type",
> - "ControlPID",
> - "Result",
> - NULL
> -};
> -
> int bus_mount_set_property(
> Unit *u,
> const char *name,
> diff --git a/src/core/dbus-mount.h b/src/core/dbus-mount.h
> index 4bb5d2d..f7004d2 100644
> --- a/src/core/dbus-mount.h
> +++ b/src/core/dbus-mount.h
> @@ -25,7 +25,6 @@
> #include "unit.h"
>
> extern const sd_bus_vtable bus_mount_vtable[];
> -extern const char * const bus_mount_changing_properties[];
>
> int bus_mount_set_property(Unit *u, const char *name, sd_bus_message *message, UnitSetPropertiesMode mode, sd_bus_error *error);
> int bus_mount_commit_properties(Unit *u);
> diff --git a/src/core/dbus-path.c b/src/core/dbus-path.c
> index 36c4e0f..b5e8941 100644
> --- a/src/core/dbus-path.c
> +++ b/src/core/dbus-path.c
> @@ -86,8 +86,3 @@ const sd_bus_vtable bus_path_vtable[] = {
> SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Path, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
> SD_BUS_VTABLE_END
> };
> -
> -const char* const bus_path_changing_properties[] = {
> - "Result",
> - NULL
> -};
> diff --git a/src/core/dbus-path.h b/src/core/dbus-path.h
> index e9558f8..667da05 100644
> --- a/src/core/dbus-path.h
> +++ b/src/core/dbus-path.h
> @@ -25,4 +25,3 @@
> #include "sd-bus.h"
>
> extern const sd_bus_vtable bus_path_vtable[];
> -extern const char* const bus_path_changing_properties[];
> diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c
> index b20b6e7..bb251ed 100644
> --- a/src/core/dbus-scope.c
> +++ b/src/core/dbus-scope.c
> @@ -36,11 +36,6 @@ const sd_bus_vtable bus_scope_vtable[] = {
> SD_BUS_VTABLE_END
> };
>
> -const char* const bus_scope_changing_properties[] = {
> - "Result",
> - NULL
> -};
> -
> static int bus_scope_set_transient_property(
> Scope *s,
> const char *name,
> diff --git a/src/core/dbus-scope.h b/src/core/dbus-scope.h
> index 30c5e1e..7e8f005 100644
> --- a/src/core/dbus-scope.h
> +++ b/src/core/dbus-scope.h
> @@ -25,7 +25,6 @@
> #include "unit.h"
>
> extern const sd_bus_vtable bus_scope_vtable[];
> -extern const char* const bus_scope_changing_properties[];
>
> int bus_scope_set_property(Unit *u, const char *name, sd_bus_message *i, UnitSetPropertiesMode mode, sd_bus_error *error);
> int bus_scope_commit_properties(Unit *u);
> diff --git a/src/core/dbus-service.c b/src/core/dbus-service.c
> index 25af7ac..3db9339 100644
> --- a/src/core/dbus-service.c
> +++ b/src/core/dbus-service.c
> @@ -69,21 +69,6 @@ const sd_bus_vtable bus_service_vtable[] = {
> SD_BUS_VTABLE_END
> };
>
> -const char* const bus_service_changing_properties[] = {
> - "ExecMainStartTimestamp",
> - "ExecMainStartTimestampMonotonic",
> - "ExecMainExitTimestamp",
> - "ExecMainExitTimestampMonotonic",
> - "ExecMainPID",
> - "ExecMainCode",
> - "ExecMainStatus",
> - "MainPID",
> - "ControlPID",
> - "StatusText",
> - "Result",
> - NULL
> -};
> -
> static int bus_service_set_transient_property(
> Service *s,
> const char *name,
> diff --git a/src/core/dbus-service.h b/src/core/dbus-service.h
> index 5fa9b2f..aab9f7a 100644
> --- a/src/core/dbus-service.h
> +++ b/src/core/dbus-service.h
> @@ -25,7 +25,6 @@
> #include "unit.h"
>
> extern const sd_bus_vtable bus_service_vtable[];
> -extern const char* const bus_service_changing_properties[];
>
> int bus_service_set_property(Unit *u, const char *name, sd_bus_message *i, UnitSetPropertiesMode mode, sd_bus_error *error);
> int bus_service_commit_properties(Unit *u);
> diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c
> index c64bf82..bb9d419 100644
> --- a/src/core/dbus-socket.c
> +++ b/src/core/dbus-socket.c
> @@ -90,7 +90,6 @@ const sd_bus_vtable bus_socket_vtable[] = {
> SD_BUS_PROPERTY("BindIPv6Only", "s", property_get_bind_ipv6_only, offsetof(Socket, bind_ipv6_only), SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_PROPERTY("Backlog", "u", bus_property_get_unsigned, offsetof(Socket, backlog), SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_PROPERTY("TimeoutUSec", "t", bus_property_get_usec, offsetof(Socket, timeout_usec), SD_BUS_VTABLE_PROPERTY_CONST),
> - SD_BUS_PROPERTY("ControlPID", "u", bus_property_get_pid, offsetof(Socket, control_pid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
> SD_BUS_PROPERTY("BindToDevice", "s", NULL, offsetof(Socket, bind_to_device), SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_PROPERTY("DirectoryMode", "u", bus_property_get_mode, offsetof(Socket, directory_mode), SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_PROPERTY("SocketMode", "u", bus_property_get_mode, offsetof(Socket, socket_mode), SD_BUS_VTABLE_PROPERTY_CONST),
> @@ -110,15 +109,16 @@ const sd_bus_vtable bus_socket_vtable[] = {
> SD_BUS_PROPERTY("Listen", "a(ss)", property_get_listen, 0, SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_PROPERTY("Mark", "i", bus_property_get_int, offsetof(Socket, mark), SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_PROPERTY("MaxConnections", "u", bus_property_get_unsigned, offsetof(Socket, max_connections), SD_BUS_VTABLE_PROPERTY_CONST),
> - SD_BUS_PROPERTY("NConnections", "u", bus_property_get_unsigned, offsetof(Socket, n_connections), 0),
> - SD_BUS_PROPERTY("NAccepted", "u", bus_property_get_unsigned, offsetof(Socket, n_accepted), 0),
> SD_BUS_PROPERTY("MessageQueueMaxMessages", "x", bus_property_get_long, offsetof(Socket, mq_maxmsg), SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_PROPERTY("MessageQueueMessageSize", "x", bus_property_get_long, offsetof(Socket, mq_msgsize), SD_BUS_VTABLE_PROPERTY_CONST),
> - SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Socket, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
> SD_BUS_PROPERTY("ReusePort", "b", bus_property_get_bool, offsetof(Socket, reuse_port), SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_PROPERTY("SmackLabel", "s", NULL, offsetof(Socket, smack), SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_PROPERTY("SmackLabelIPIn", "s", NULL, offsetof(Socket, smack_ip_in), SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_PROPERTY("SmackLabelIPOut", "s", NULL, offsetof(Socket, smack_ip_out), SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("ControlPID", "u", bus_property_get_pid, offsetof(Socket, control_pid), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
> + SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Socket, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
> + SD_BUS_PROPERTY("NConnections", "u", bus_property_get_unsigned, offsetof(Socket, n_connections), 0),
> + SD_BUS_PROPERTY("NAccepted", "u", bus_property_get_unsigned, offsetof(Socket, n_accepted), 0),
> BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPre", offsetof(Socket, exec_command[SOCKET_EXEC_START_PRE]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
> BUS_EXEC_COMMAND_LIST_VTABLE("ExecStartPost", offsetof(Socket, exec_command[SOCKET_EXEC_START_POST]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
> BUS_EXEC_COMMAND_LIST_VTABLE("ExecStopPre", offsetof(Socket, exec_command[SOCKET_EXEC_STOP_PRE]), SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
> @@ -126,14 +126,6 @@ const sd_bus_vtable bus_socket_vtable[] = {
> SD_BUS_VTABLE_END
> };
>
> -const char* const bus_socket_changing_properties[] = {
> - "ControlPID",
> - "NAccepted",
> - "NConnections",
> - "Result",
> - NULL
> -};
> -
> int bus_socket_set_property(
> Unit *u,
> const char *name,
> diff --git a/src/core/dbus-socket.h b/src/core/dbus-socket.h
> index 8808fa2..17164d9 100644
> --- a/src/core/dbus-socket.h
> +++ b/src/core/dbus-socket.h
> @@ -25,7 +25,6 @@
> #include "unit.h"
>
> extern const sd_bus_vtable bus_socket_vtable[];
> -extern const char* const bus_socket_changing_properties[];
>
> int bus_socket_set_property(Unit *u, const char *name, sd_bus_message *message, UnitSetPropertiesMode mode, sd_bus_error *error);
> int bus_socket_commit_properties(Unit *u);
> diff --git a/src/core/dbus-swap.c b/src/core/dbus-swap.c
> index bad53fe..7bd05db 100644
> --- a/src/core/dbus-swap.c
> +++ b/src/core/dbus-swap.c
> @@ -69,14 +69,6 @@ const sd_bus_vtable bus_swap_vtable[] = {
> SD_BUS_VTABLE_END
> };
>
> -const char* const bus_swap_changing_properties[] = {
> - "What",
> - "Priority",
> - "ControlPID",
> - "Result",
> - NULL
> -};
> -
> int bus_swap_set_property(
> Unit *u,
> const char *name,
> diff --git a/src/core/dbus-swap.h b/src/core/dbus-swap.h
> index 5d35737..9469f68 100644
> --- a/src/core/dbus-swap.h
> +++ b/src/core/dbus-swap.h
> @@ -26,7 +26,6 @@
> #include "unit.h"
>
> extern const sd_bus_vtable bus_swap_vtable[];
> -extern const char* const bus_swap_changing_properties[];
>
> int bus_swap_set_property(Unit *u, const char *name, sd_bus_message *message, UnitSetPropertiesMode mode, sd_bus_error *error);
> int bus_swap_commit_properties(Unit *u);
> diff --git a/src/core/dbus-timer.c b/src/core/dbus-timer.c
> index b37c0d0..277a45c 100644
> --- a/src/core/dbus-timer.c
> +++ b/src/core/dbus-timer.c
> @@ -146,10 +146,3 @@ const sd_bus_vtable bus_timer_vtable[] = {
> SD_BUS_PROPERTY("AccuracyUSec", "t", bus_property_get_usec, offsetof(Timer, accuracy_usec), SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_VTABLE_END
> };
> -
> -const char* const bus_timer_changing_properties[] = {
> - "NextElapseUSecRealtime",
> - "NextElapseUSecMonotonic",
> - "Result",
> - NULL
> -};
> diff --git a/src/core/dbus-timer.h b/src/core/dbus-timer.h
> index ddd311c..cfff88e 100644
> --- a/src/core/dbus-timer.h
> +++ b/src/core/dbus-timer.h
> @@ -24,4 +24,3 @@
> #include "sd-bus.h"
>
> extern const sd_bus_vtable bus_timer_vtable[];
> -extern const char* const bus_timer_changing_properties[];
> diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c
> index 7a566ff..4d3e3cc 100644
> --- a/src/core/dbus-unit.c
> +++ b/src/core/dbus-unit.c
> @@ -634,29 +634,25 @@ static int send_changed_signal(sd_bus *bus, const char *destination, void *userd
> * type, then for the generic unit. The clients may rely on
> * this order to get atomic behavior if needed. */
>
> - if (UNIT_VTABLE(u)->bus_changing_properties) {
> -
> - r = sd_bus_emit_properties_changed_strv(
> - bus, p,
> - UNIT_VTABLE(u)->bus_interface,
> - (char**) UNIT_VTABLE(u)->bus_changing_properties);
> - if (r < 0)
> - return r;
> + r = sd_bus_emit_properties_changed_strv(
> + bus, p,
> + UNIT_VTABLE(u)->bus_interface,
> + NULL);
> + if (r < 0) {
> + log_warning("Failed to send out specific PropertiesChanged signal for %s: %s", u->id, strerror(-r));
> + return r;
> }
>
> - return sd_bus_emit_properties_changed(
> + r = sd_bus_emit_properties_changed_strv(
> bus, p,
> "org.freedesktop.systemd1.Unit",
> - "ActiveState",
> - "SubState",
> - "InactiveExitTimestamp",
> - "ActiveEnterTimestamp",
> - "ActiveExitTimestamp",
> - "InactiveEnterTimestamp",
> - "Job",
> - "ConditionResult",
> - "ConditionTimestamp",
> NULL);
> + if (r < 0) {
> + log_warning("Failed to send out generic PropertiesChanged signal for %s: %s", u->id, strerror(-r));
> + return r;
> + }
> +
> + return 0;
> }
>
> void bus_unit_send_change_signal(Unit *u) {
> diff --git a/src/core/device.c b/src/core/device.c
> index 72d98ae..2c44dec 100644
> --- a/src/core/device.c
> +++ b/src/core/device.c
> @@ -653,7 +653,6 @@ const UnitVTable device_vtable = {
> .sub_state_to_string = device_sub_state_to_string,
>
> .bus_interface = "org.freedesktop.systemd1.Device",
> - .bus_changing_properties = bus_device_changing_properties,
> .bus_vtable = bus_device_vtable,
>
> .following = device_following,
> diff --git a/src/core/mount.c b/src/core/mount.c
> index 77493db..2b7934e 100644
> --- a/src/core/mount.c
> +++ b/src/core/mount.c
> @@ -1793,7 +1793,6 @@ const UnitVTable mount_vtable = {
>
> .bus_interface = "org.freedesktop.systemd1.Mount",
> .bus_vtable = bus_mount_vtable,
> - .bus_changing_properties = bus_mount_changing_properties,
> .bus_set_property = bus_mount_set_property,
> .bus_commit_properties = bus_mount_commit_properties,
>
> diff --git a/src/core/path.c b/src/core/path.c
> index 51e8d1d..fc7069e 100644
> --- a/src/core/path.c
> +++ b/src/core/path.c
> @@ -805,6 +805,5 @@ const UnitVTable path_vtable = {
> .reset_failed = path_reset_failed,
>
> .bus_interface = "org.freedesktop.systemd1.Path",
> - .bus_vtable = bus_path_vtable,
> - .bus_changing_properties = bus_path_changing_properties
> + .bus_vtable = bus_path_vtable
> };
> diff --git a/src/core/scope.c b/src/core/scope.c
> index a3c9479..56c3746 100644
> --- a/src/core/scope.c
> +++ b/src/core/scope.c
> @@ -492,7 +492,6 @@ const UnitVTable scope_vtable = {
>
> .bus_interface = "org.freedesktop.systemd1.Scope",
> .bus_vtable = bus_scope_vtable,
> - .bus_changing_properties = bus_scope_changing_properties,
> .bus_set_property = bus_scope_set_property,
> .bus_commit_properties = bus_scope_commit_properties,
>
> diff --git a/src/core/service.c b/src/core/service.c
> index 6c82ced..87eaa29 100644
> --- a/src/core/service.c
> +++ b/src/core/service.c
> @@ -3836,7 +3836,6 @@ const UnitVTable service_vtable = {
>
> .bus_interface = "org.freedesktop.systemd1.Service",
> .bus_vtable = bus_service_vtable,
> - .bus_changing_properties = bus_service_changing_properties,
> .bus_set_property = bus_service_set_property,
> .bus_commit_properties = bus_service_commit_properties,
>
> diff --git a/src/core/socket.c b/src/core/socket.c
> index d6289a3..2442221 100644
> --- a/src/core/socket.c
> +++ b/src/core/socket.c
> @@ -2424,7 +2424,6 @@ const UnitVTable socket_vtable = {
>
> .bus_interface = "org.freedesktop.systemd1.Socket",
> .bus_vtable = bus_socket_vtable,
> - .bus_changing_properties = bus_socket_changing_properties,
> .bus_set_property = bus_socket_set_property,
> .bus_commit_properties = bus_socket_commit_properties,
>
> diff --git a/src/core/swap.c b/src/core/swap.c
> index b197eb4..79862e5 100644
> --- a/src/core/swap.c
> +++ b/src/core/swap.c
> @@ -1445,7 +1445,6 @@ const UnitVTable swap_vtable = {
>
> .bus_interface = "org.freedesktop.systemd1.Swap",
> .bus_vtable = bus_swap_vtable,
> - .bus_changing_properties = bus_swap_changing_properties,
> .bus_set_property = bus_swap_set_property,
> .bus_commit_properties = bus_swap_commit_properties,
>
> diff --git a/src/core/timer.c b/src/core/timer.c
> index f23582c..a4ff662 100644
> --- a/src/core/timer.c
> +++ b/src/core/timer.c
> @@ -646,5 +646,4 @@ const UnitVTable timer_vtable = {
>
> .bus_interface = "org.freedesktop.systemd1.Timer",
> .bus_vtable = bus_timer_vtable,
> - .bus_changing_properties = bus_timer_changing_properties,
> };
> diff --git a/src/core/unit.h b/src/core/unit.h
> index 8ceeece..45816ea 100644
> --- a/src/core/unit.h
> +++ b/src/core/unit.h
> @@ -426,9 +426,6 @@ struct UnitVTable {
> /* The bus vtable */
> const sd_bus_vtable *bus_vtable;
>
> - /* strv list of changing properties */
> - const char * const * const bus_changing_properties;
> -
> /* The strings to print in status messages */
> UnitStatusMessageFormats status_message_formats;
>
>
> commit a03e4337fd2ae1cc90989e9b7b5f160b42cdb021
> Author: Lennart Poettering <lennart at poettering.net>
> Date: Sun Dec 22 03:22:34 2013 +0100
>
> bus: allow invocation of sd_bus_emit_properties_changed_strv() with NULL list
>
> When NULL is passed this shall indicate that a PropertiesChanged message
> for all properties marked as EMITS_CHANGE or EMITS_INVALIDATION should
> be generated.
>
> diff --git a/src/libsystemd-bus/bus-objects.c b/src/libsystemd-bus/bus-objects.c
> index e468025..68437f1 100644
> --- a/src/libsystemd-bus/bus-objects.c
> +++ b/src/libsystemd-bus/bus-objects.c
> @@ -617,6 +617,52 @@ static int property_get_set_callbacks_run(
> return 1;
> }
>
> +static int vtable_append_one_property(
> + sd_bus *bus,
> + sd_bus_message *reply,
> + const char *path,
> + struct node_vtable *c,
> + const sd_bus_vtable *v,
> + void *userdata,
> + sd_bus_error *error) {
> +
> + int r;
> +
> + assert(bus);
> + assert(reply);
> + assert(path);
> + assert(c);
> + assert(v);
> +
> + r = sd_bus_message_open_container(reply, 'e', "sv");
> + if (r < 0)
> + return r;
> +
> + r = sd_bus_message_append(reply, "s", v->x.property.member);
> + if (r < 0)
> + return r;
> +
> + r = sd_bus_message_open_container(reply, 'v', v->x.property.signature);
> + if (r < 0)
> + return r;
> +
> + r = invoke_property_get(bus, v, path, c->interface, v->x.property.member, reply, vtable_property_convert_userdata(v, userdata), error);
> + if (r < 0)
> + return r;
> + if (bus->nodes_modified)
> + return 0;
> +
> + r = sd_bus_message_close_container(reply);
> + if (r < 0)
> + return r;
> +
> + r = sd_bus_message_close_container(reply);
> + if (r < 0)
> + return r;
> +
> + return 0;
> +}
> +
> static int vtable_append_all_properties(
> sd_bus *bus,
> sd_bus_message *reply,
> @@ -643,31 +689,11 @@ static int vtable_append_all_properties(
> if (v->flags & SD_BUS_VTABLE_HIDDEN)
> continue;
>
> - r = sd_bus_message_open_container(reply, 'e', "sv");
> - if (r < 0)
> - return r;
> -
> - r = sd_bus_message_append(reply, "s", v->x.property.member);
> - if (r < 0)
> - return r;
> -
> - r = sd_bus_message_open_container(reply, 'v', v->x.property.signature);
> - if (r < 0)
> - return r;
> -
> - r = invoke_property_get(bus, v, path, c->interface, v->x.property.member, reply, vtable_property_convert_userdata(v, userdata), error);
> + r = vtable_append_one_property(bus, reply, path, c, v, userdata, error);
> if (r < 0)
> return r;
> if (bus->nodes_modified)
> return 0;
> -
> - r = sd_bus_message_close_container(reply);
> - if (r < 0)
> - return r;
> -
> - r = sd_bus_message_close_container(reply);
> - if (r < 0)
> - return r;
> }
>
> return 1;
> @@ -1996,57 +2022,75 @@ static int emit_properties_changed_on_interface(
> if (r == 0)
> continue;
>
> - STRV_FOREACH(property, names) {
> - struct vtable_member *v;
> + if (names) {
> + /* If the caller specified a list of
> + * properties we include exactly those in the
> + * PropertiesChanged message */
>
> - assert_return(member_name_is_valid(*property), -EINVAL);
> + STRV_FOREACH(property, names) {
> + struct vtable_member *v;
>
> - key.member = *property;
> - v = hashmap_get(bus->vtable_properties, &key);
> - if (!v)
> - return -ENOENT;
> + assert_return(member_name_is_valid(*property), -EINVAL);
>
> - /* If there are two vtables for the same
> - * interface, let's handle this property when
> - * we come to that vtable. */
> - if (c != v->parent)
> - continue;
> + key.member = *property;
> + v = hashmap_get(bus->vtable_properties, &key);
> + if (!v)
> + return -ENOENT;
> +
> + /* If there are two vtables for the same
> + * interface, let's handle this property when
> + * we come to that vtable. */
> + if (c != v->parent)
> + continue;
>
> - assert_return(v->vtable->flags & SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE ||
> - v->vtable->flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION, -EDOM);
> + assert_return(v->vtable->flags & SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE ||
> + v->vtable->flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION, -EDOM);
>
> - if (v->vtable->flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION) {
> - has_invalidating = true;
> - continue;
> + assert_return(!(v->vtable->flags & SD_BUS_VTABLE_HIDDEN), -EDOM);
> +
> + if (v->vtable->flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION) {
> + has_invalidating = true;
> + continue;
> + }
> +
> + has_changing = true;
> +
> + r = vtable_append_one_property(bus, m, m->path, c, v->vtable, u, &error);
> + if (r < 0)
> + return r;
> + if (bus->nodes_modified)
> + return 0;
> }
> + } else {
> + const sd_bus_vtable *v;
>
> - has_changing = true;
> + /* If the caller specified no properties list
> + * we include all properties that are marked
> + * as changing in the message. */
>
> - r = sd_bus_message_open_container(m, 'e', "sv");
> - if (r < 0)
> - return r;
> + for (v = c->vtable+1; v->type != _SD_BUS_VTABLE_END; v++) {
> + if (v->type != _SD_BUS_VTABLE_PROPERTY && v->type != _SD_BUS_VTABLE_WRITABLE_PROPERTY)
> + continue;
>
> - r = sd_bus_message_append(m, "s", *property);
> - if (r < 0)
> - return r;
> + if (v->flags & SD_BUS_VTABLE_HIDDEN)
> + continue;
>
> - r = sd_bus_message_open_container(m, 'v', v->vtable->x.property.signature);
> - if (r < 0)
> - return r;
> + if (v->flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION) {
> + has_invalidating = true;
> + continue;
> + }
>
> - r = invoke_property_get(bus, v->vtable, m->path, interface, *property, m, vtable_property_convert_userdata(v->vtable, u), &error);
> - if (r < 0)
> - return r;
> - if (bus->nodes_modified)
> - return 0;
> + if (!(v->flags & SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE))
> + continue;
>
> - r = sd_bus_message_close_container(m);
> - if (r < 0)
> - return r;
> + has_changing = true;
>
> - r = sd_bus_message_close_container(m);
> - if (r < 0)
> - return r;
> + r = vtable_append_one_property(bus, m, m->path, c, v, u, &error);
> + if (r < 0)
> + return r;
> + if (bus->nodes_modified)
> + return 0;
> + }
> }
> }
>
> @@ -2077,19 +2121,38 @@ static int emit_properties_changed_on_interface(
> if (r == 0)
> continue;
>
> - STRV_FOREACH(property, names) {
> - struct vtable_member *v;
> + if (names) {
> + STRV_FOREACH(property, names) {
> + struct vtable_member *v;
>
> - key.member = *property;
> - assert_se(v = hashmap_get(bus->vtable_properties, &key));
> - assert(c == v->parent);
> + key.member = *property;
> + assert_se(v = hashmap_get(bus->vtable_properties, &key));
> + assert(c == v->parent);
>
> - if (!(v->vtable->flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION))
> - continue;
> + if (!(v->vtable->flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION))
> + continue;
>
> - r = sd_bus_message_append(m, "s", *property);
> - if (r < 0)
> - return r;
> + r = sd_bus_message_append(m, "s", *property);
> + if (r < 0)
> + return r;
> + }
> + } else {
> + const sd_bus_vtable *v;
> +
> + for (v = c->vtable+1; v->type != _SD_BUS_VTABLE_END; v++) {
> + if (v->type != _SD_BUS_VTABLE_PROPERTY && v->type != _SD_BUS_VTABLE_WRITABLE_PROPERTY)
> + continue;
> +
> + if (v->flags & SD_BUS_VTABLE_HIDDEN)
> + continue;
> +
> + if (!(v->flags & SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION))
> + continue;
> +
> + r = sd_bus_message_append(m, "s", v->x.property.member);
> + if (r < 0)
> + return r;
> + }
> }
> }
> }
> @@ -2121,7 +2184,12 @@ _public_ int sd_bus_emit_properties_changed_strv(
> assert_return(BUS_IS_OPEN(bus->state), -ENOTCONN);
> assert_return(!bus_pid_changed(bus), -ECHILD);
>
> - if (strv_isempty(names))
> +
> + /* A non-NULL but empty names list means nothing needs to be
> + generated. A NULL list OTOH indicates that all properties
> + that are set to EMITS_CHANGE or EMITS_INVALIDATION shall be
> + included in the PropertiesChanged message. */
> + if (names && names[0] == NULL)
> return 0;
>
> do {
> diff --git a/src/libsystemd-bus/test-bus-objects.c b/src/libsystemd-bus/test-bus-objects.c
> index 0ab7a14..e2423c7 100644
> --- a/src/libsystemd-bus/test-bus-objects.c
> +++ b/src/libsystemd-bus/test-bus-objects.c
> @@ -143,6 +143,17 @@ static int notify_test(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus_er
> return 1;
> }
>
> +static int notify_test2(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus_error *error) {
> + int r;
> +
> + assert_se(sd_bus_emit_properties_changed_strv(bus, m->path, "org.freedesktop.systemd.ValueTest", NULL) >= 0);
> +
> + r = sd_bus_reply_method_return(m, NULL);
> + assert_se(r >= 0);
> +
> + return 1;
> +}
> +
> static int emit_interfaces_added(sd_bus *bus, sd_bus_message *m, void *userdata, sd_bus_error *error) {
> int r;
>
> @@ -181,7 +192,11 @@ static const sd_bus_vtable vtable[] = {
> static const sd_bus_vtable vtable2[] = {
> SD_BUS_VTABLE_START(0),
> SD_BUS_METHOD("NotifyTest", "", "", notify_test, 0),
> + SD_BUS_METHOD("NotifyTest2", "", "", notify_test2, 0),
> SD_BUS_PROPERTY("Value", "s", value_handler, 10, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
> + SD_BUS_PROPERTY("Value2", "s", value_handler, 10, SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION),
> + SD_BUS_PROPERTY("Value3", "s", value_handler, 10, SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("Value4", "s", value_handler, 10, 0),
> SD_BUS_VTABLE_END
> };
>
> @@ -405,6 +420,18 @@ static int client(struct context *c) {
> sd_bus_message_unref(reply);
> reply = NULL;
>
> + r = sd_bus_call_method(bus, "org.freedesktop.systemd.test", "/value/a", "org.freedesktop.systemd.ValueTest", "NotifyTest2", &error, NULL, "");
> + assert_se(r >= 0);
> +
> + r = sd_bus_process(bus, &reply);
> + assert_se(r > 0);
> +
> + assert_se(sd_bus_message_is_signal(reply, "org.freedesktop.DBus.Properties", "PropertiesChanged"));
> + bus_message_dump(reply, stdout, true);
> +
> + sd_bus_message_unref(reply);
> + reply = NULL;
> +
> r = sd_bus_call_method(bus, "org.freedesktop.systemd.test", "/foo", "org.freedesktop.systemd.test", "EmitInterfacesAdded", &error, NULL, "");
> assert_se(r >= 0);
>
>
> commit 556089dc57b10a12a03edd3d3e90ca17398ad206
> Author: Lennart Poettering <lennart at poettering.net>
> Date: Sun Dec 22 02:24:05 2013 +0100
>
> bus: decorate the various object vtables with SD_BUS_VTABLE_PROPERTY_CONST where appropriate
>
> diff --git a/src/core/dbus-automount.c b/src/core/dbus-automount.c
> index 420cfaa..8559aed 100644
> --- a/src/core/dbus-automount.c
> +++ b/src/core/dbus-automount.c
> @@ -29,8 +29,8 @@ static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_result, automount_result, Autom
>
> const sd_bus_vtable bus_automount_vtable[] = {
> SD_BUS_VTABLE_START(0),
> - SD_BUS_PROPERTY("Where", "s", NULL, offsetof(Automount, where), 0),
> - SD_BUS_PROPERTY("DirectoryMode", "u", bus_property_get_mode, offsetof(Automount, directory_mode), 0),
> + SD_BUS_PROPERTY("Where", "s", NULL, offsetof(Automount, where), SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("DirectoryMode", "u", bus_property_get_mode, offsetof(Automount, directory_mode), SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(Automount, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
> SD_BUS_VTABLE_END
> };
> diff --git a/src/core/dbus-busname.c b/src/core/dbus-busname.c
> index f9511a9..9f94bf1 100644
> --- a/src/core/dbus-busname.c
> +++ b/src/core/dbus-busname.c
> @@ -29,7 +29,7 @@ static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_result, busname_result, BusName
>
> const sd_bus_vtable bus_busname_vtable[] = {
> SD_BUS_VTABLE_START(0),
> - SD_BUS_PROPERTY("Name", "s", NULL, offsetof(BusName, name), 0),
> + SD_BUS_PROPERTY("Name", "s", NULL, offsetof(BusName, name), SD_BUS_VTABLE_PROPERTY_CONST),
> SD_BUS_PROPERTY("Result", "s", property_get_result, offsetof(BusName, result), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
> SD_BUS_VTABLE_END
> };
> diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
> index 39865a9..413ace4 100644
> --- a/src/core/dbus-cgroup.c
> +++ b/src/core/dbus-cgroup.c
> @@ -135,17 +135,17 @@ static int property_get_device_allow(
>
> const sd_bus_vtable bus_cgroup_vtable[] = {
> + SD_BUS_PROPERTY("CPUAccounting", "b", bus_property_get_bool, offsetof(CGroupContext, cpu_accounting), SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("CPUShares", "t", bus_property_get_ulong, offsetof(CGroupContext, cpu_shares), SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("BlockIOAccounting", "b", bus_property_get_bool, offsetof(CGroupContext, blockio_accounting), SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("BlockIOWeight", "t", bus_property_get_ulong, offsetof(CGroupContext, blockio_weight), SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("BlockIODeviceWeight", "a(st)", property_get_blockio_device_weight, 0, SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("BlockIOReadBandwidth", "a(st)", property_get_blockio_device_bandwidths, 0, SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("BlockIOWriteBandwidth", "a(st)", property_get_blockio_device_bandwidths, 0, SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("MemoryAccounting", "b", bus_property_get_bool, offsetof(CGroupContext, memory_accounting), SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("MemoryLimit", "t", NULL, offsetof(CGroupContext, memory_limit), SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("DevicePolicy", "s", property_get_cgroup_device_policy, offsetof(CGroupContext, device_policy), SD_BUS_VTABLE_PROPERTY_CONST),
> + SD_BUS_PROPERTY("DeviceAllow", "a(ss)", property_get_device_allow, 0, SD_BUS_VTABLE_PROPERTY_CONST),
Aren't properties like "CPUShares", "MemoryAccounting", and others modifiable at runtime?
Or does this _CONST mean something different?
Zbyszek
More information about the systemd-devel
mailing list