summaryrefslogtreecommitdiff
path: root/src/resolve/resolved-dnssd.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2021-05-08 01:56:24 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-05-08 15:12:31 +0900
commitb8d6689a7f600e8d9e64898a06b0521557e114e3 (patch)
tree2c153066d3d78a0aea34f065d8ec6331deb39eee /src/resolve/resolved-dnssd.c
parent933e95d716394e806ae7aab674b3122c6f264d6c (diff)
downloadsystemd-b8d6689a7f600e8d9e64898a06b0521557e114e3.tar.gz
resolve: check that bus is ready before emitting signal or property change
Diffstat (limited to 'src/resolve/resolved-dnssd.c')
-rw-r--r--src/resolve/resolved-dnssd.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/resolve/resolved-dnssd.c b/src/resolve/resolved-dnssd.c
index 33d695a9ce..aed9c5c1cd 100644
--- a/src/resolve/resolved-dnssd.c
+++ b/src/resolve/resolved-dnssd.c
@@ -329,10 +329,13 @@ int dnssd_txt_item_new_from_data(const char *key, const void *data, const size_t
return 0;
}
-void dnssd_signal_conflict(Manager *manager, const char *name) {
+int dnssd_signal_conflict(Manager *manager, const char *name) {
DnssdService *s;
int r;
+ if (sd_bus_is_ready(manager->bus) <= 0)
+ return 0;
+
HASHMAP_FOREACH(s, manager->dnssd_services) {
if (s->withdrawn)
continue;
@@ -343,22 +346,20 @@ void dnssd_signal_conflict(Manager *manager, const char *name) {
s->withdrawn = true;
r = sd_bus_path_encode("/org/freedesktop/resolve1/dnssd", s->name, &path);
- if (r < 0) {
- log_error_errno(r, "Can't get D-BUS object path: %m");
- return;
- }
+ if (r < 0)
+ return log_error_errno(r, "Can't get D-BUS object path: %m");
r = sd_bus_emit_signal(manager->bus,
path,
"org.freedesktop.resolve1.DnssdService",
"Conflicted",
NULL);
- if (r < 0) {
- log_error_errno(r, "Cannot emit signal: %m");
- return;
- }
+ if (r < 0)
+ return log_error_errno(r, "Cannot emit signal: %m");
break;
}
}
+
+ return 0;
}