summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2016-02-01 21:27:33 +0100
committerLennart Poettering <lennart@poettering.net>2016-02-01 22:18:16 +0100
commitb93ea5d3681c15155f50a296802e4ab6f04e3cd1 (patch)
treebd93fe0f3cf027c45080cb5b53fc203f24e76cf8
parentbasic: add new rlimit_format() call (diff)
downloadsystemd-b93ea5d3681c15155f50a296802e4ab6f04e3cd1.tar.xz
systemd-b93ea5d3681c15155f50a296802e4ab6f04e3cd1.zip
core: fix handling of AccuracyUSec and RandomDelayUSec bus properties
Clear up some confusion regarding the USec and Sec suffixes we use. In configuration files we usually use the Sec suffix, to indicate the implied time unit if none is specified. The respective bus properties however use the USec property, since they expose 64bit unsigned integers containing time in µs. Before this patch timer units exposed a bus property AccuracyUSec (which hence is the correct name) but when parsing transient property data would look for AccuracySec instead (which is incorrect). This patch ensures we look for AccuracySec correctly, but keeps the code for AccuracyUSec in place for compatibility, but adds a warning to ensure that apps are updated to use the right property.
-rw-r--r--src/core/dbus-timer.c6
-rw-r--r--src/shared/bus-util.c28
2 files changed, 15 insertions, 19 deletions
diff --git a/src/core/dbus-timer.c b/src/core/dbus-timer.c
index ec301df6d7..212f9e1d8d 100644
--- a/src/core/dbus-timer.c
+++ b/src/core/dbus-timer.c
@@ -267,10 +267,12 @@ static int bus_timer_set_transient_property(
return 1;
- } else if (streq(name, "AccuracySec")) {
-
+ } else if (STR_IN_SET(name, "AccuracyUSec", "AccuracySec")) {
usec_t u = 0;
+ if (streq(name, "AccuracySec"))
+ log_notice("Client is using obsolete AccuracySec= transient property, please use AccuracyUSec= instead.");
+
r = sd_bus_message_read(message, "t", &u);
if (r < 0)
return r;
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index 63fd9b9514..3afe157905 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -1459,18 +1459,22 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
return 0;
- } else if (streq(field, "RandomizedDelaySec")) {
+ } else if (STR_IN_SET(field, "AccuracySec", "RandomizedDelaySec")) {
+ char *n;
usec_t t;
-
+ size_t l;
r = parse_sec(eq, &t);
if (r < 0)
- return log_error_errno(r, "Failed to parse RandomizedDelaySec= parameter: %s", eq);
+ return log_error_errno(r, "Failed to parse %s= parameter: %s", field, eq);
- r = sd_bus_message_append_basic(m, SD_BUS_TYPE_STRING, "RandomizedDelayUSec");
- if (r < 0)
- return bus_log_create_error(r);
+ l = strlen(field);
+ n = newa(char, l + 2);
+ if (!n)
+ return log_oom();
- r = sd_bus_message_append(m, "v", "t", t);
+ /* Change suffix Sec → USec */
+ strcpy(mempcpy(n, field, l - 3), "USec");
+ r = sd_bus_message_append(m, "sv", n, "t", t);
if (r < 0)
return bus_log_create_error(r);
@@ -1746,16 +1750,6 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
r = sd_bus_message_append(m, "v", "i", sig);
- } else if (streq(field, "AccuracySec")) {
- usec_t u;
-
- r = parse_sec(eq, &u);
- if (r < 0) {
- log_error("Failed to parse %s value %s", field, eq);
- return -EINVAL;
- }
-
- r = sd_bus_message_append(m, "v", "t", u);
} else if (streq(field, "TimerSlackNSec")) {
nsec_t n;