]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolve: check that bus is ready before emitting signal or property change 19542/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 7 May 2021 16:56:24 +0000 (01:56 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 8 May 2021 06:12:31 +0000 (15:12 +0900)
src/resolve/resolved-bus.c
src/resolve/resolved-dns-zone.c
src/resolve/resolved-dnssd.c
src/resolve/resolved-dnssd.h

index 31c96706a21bd9cd8a25006ec942f0e5ffde2809..7226200f00664500bf02d776131f0ca11bacbc5c 100644 (file)
@@ -2272,6 +2272,9 @@ int manager_connect_bus(Manager *m) {
 int _manager_send_changed(Manager *manager, const char *property, ...) {
         assert(manager);
 
+        if (sd_bus_is_ready(manager->bus) <= 0)
+                return 0;
+
         char **l = strv_from_stdarg_alloca(property);
 
         int r = sd_bus_emit_properties_changed_strv(
index 6f15c53953ea03cc9b6116ea213aea4600334e9a..b86b325144838512918a49ec06ff363d08804b19 100644 (file)
@@ -500,7 +500,7 @@ void dns_zone_item_conflict(DnsZoneItem *i) {
         /* Withdraw the conflict item */
         i->state = DNS_ZONE_ITEM_WITHDRAWN;
 
-        dnssd_signal_conflict(i->scope->manager, dns_resource_key_name(i->rr->key));
+        (void) dnssd_signal_conflict(i->scope->manager, dns_resource_key_name(i->rr->key));
 
         /* Maybe change the hostname */
         if (manager_is_own_hostname(i->scope->manager, dns_resource_key_name(i->rr->key)) > 0)
index 33d695a9ce7e60cec56afef2e944f05fee899fb5..aed9c5c1cdbf295b3b5dbe3f65a1dd6cd4dd3f88 100644 (file)
@@ -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;
 }
index 8fe755687e170d1564681221211856416fc8d39c..d020bb531cc09365eab22d057f17abd067acb895 100644 (file)
@@ -58,4 +58,4 @@ int dnssd_load(Manager *manager);
 int dnssd_txt_item_new_from_string(const char *key, const char *value, DnsTxtItem **ret_item);
 int dnssd_txt_item_new_from_data(const char *key, const void *value, const size_t size, DnsTxtItem **ret_item);
 int dnssd_update_rrs(DnssdService *s);
-void dnssd_signal_conflict(Manager *manager, const char *name);
+int dnssd_signal_conflict(Manager *manager, const char *name);