tree-wide: install matches asynchronously
Let's remove a number of synchronization points from our service startups: let's drop synchronous match installation, and let's opt for asynchronous instead. Also, let's use sd_bus_match_signal() instead of sd_bus_add_match() where we can.
This commit is contained in:
+18
-19
@@ -1568,9 +1568,9 @@ static int login_machine(int argc, char *argv[], void *userdata) {
|
||||
"member='MachineRemoved',"
|
||||
"arg0='", machine, "'");
|
||||
|
||||
r = sd_bus_add_match(bus, &slot, match, on_machine_removed, &forward);
|
||||
r = sd_bus_add_match_async(bus, &slot, match, on_machine_removed, NULL, &forward);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to add machine removal match: %m");
|
||||
return log_error_errno(r, "Failed to request machine removal match: %m");
|
||||
|
||||
r = sd_bus_call_method(
|
||||
bus,
|
||||
@@ -1643,9 +1643,9 @@ static int shell_machine(int argc, char *argv[], void *userdata) {
|
||||
"member='MachineRemoved',"
|
||||
"arg0='", machine, "'");
|
||||
|
||||
r = sd_bus_add_match(bus, &slot, match, on_machine_removed, &forward);
|
||||
r = sd_bus_add_match_async(bus, &slot, match, on_machine_removed, NULL, &forward);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to add machine removal match: %m");
|
||||
return log_error_errno(r, "Failed to request machine removal match: %m");
|
||||
|
||||
r = sd_bus_message_new_method_call(
|
||||
bus,
|
||||
@@ -2087,28 +2087,27 @@ static int transfer_image_common(sd_bus *bus, sd_bus_message *m) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to attach bus to event loop: %m");
|
||||
|
||||
r = sd_bus_add_match(
|
||||
r = sd_bus_match_signal_async(
|
||||
bus,
|
||||
&slot_job_removed,
|
||||
"type='signal',"
|
||||
"sender='org.freedesktop.import1',"
|
||||
"interface='org.freedesktop.import1.Manager',"
|
||||
"member='TransferRemoved',"
|
||||
"path='/org/freedesktop/import1'",
|
||||
match_transfer_removed, &path);
|
||||
"org.freedesktop.import1",
|
||||
"/org/freedesktop/import1",
|
||||
"org.freedesktop.import1.Manager",
|
||||
"TransferRemoved",
|
||||
match_transfer_removed, NULL, &path);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to install match: %m");
|
||||
return log_error_errno(r, "Failed to request match: %m");
|
||||
|
||||
r = sd_bus_add_match(
|
||||
r = sd_bus_match_signal_async(
|
||||
bus,
|
||||
&slot_log_message,
|
||||
"type='signal',"
|
||||
"sender='org.freedesktop.import1',"
|
||||
"interface='org.freedesktop.import1.Transfer',"
|
||||
"member='LogMessage'",
|
||||
match_log_message, &path);
|
||||
"org.freedesktop.import1",
|
||||
NULL,
|
||||
"org.freedesktop.import1.Transfer",
|
||||
"LogMessage",
|
||||
match_log_message, NULL, &path);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to install match: %m");
|
||||
return log_error_errno(r, "Failed to request match: %m");
|
||||
|
||||
r = sd_bus_call(bus, m, 0, &error, &reply);
|
||||
if (r < 0) {
|
||||
|
||||
+35
-39
@@ -216,53 +216,49 @@ static int manager_connect_bus(Manager *m) {
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to add image enumerator: %m");
|
||||
|
||||
r = sd_bus_add_match(m->bus,
|
||||
NULL,
|
||||
"type='signal',"
|
||||
"sender='org.freedesktop.systemd1',"
|
||||
"interface='org.freedesktop.systemd1.Manager',"
|
||||
"member='JobRemoved',"
|
||||
"path='/org/freedesktop/systemd1'",
|
||||
match_job_removed,
|
||||
m);
|
||||
r = sd_bus_match_signal_async(
|
||||
m->bus,
|
||||
NULL,
|
||||
"org.freedesktop.systemd1",
|
||||
"/org/freedesktop/systemd1",
|
||||
"org.freedesktop.systemd1.Manager",
|
||||
"JobRemoved",
|
||||
match_job_removed, NULL, m);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to add match for JobRemoved: %m");
|
||||
|
||||
r = sd_bus_add_match(m->bus,
|
||||
NULL,
|
||||
"type='signal',"
|
||||
"sender='org.freedesktop.systemd1',"
|
||||
"interface='org.freedesktop.systemd1.Manager',"
|
||||
"member='UnitRemoved',"
|
||||
"path='/org/freedesktop/systemd1'",
|
||||
match_unit_removed,
|
||||
m);
|
||||
r = sd_bus_match_signal_async(
|
||||
m->bus,
|
||||
NULL,
|
||||
"org.freedesktop.systemd1",
|
||||
"/org/freedesktop/systemd1",
|
||||
"org.freedesktop.systemd1.Manager",
|
||||
"UnitRemoved",
|
||||
match_unit_removed, NULL, m);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to add match for UnitRemoved: %m");
|
||||
return log_error_errno(r, "Failed to request match for UnitRemoved: %m");
|
||||
|
||||
r = sd_bus_add_match(m->bus,
|
||||
NULL,
|
||||
"type='signal',"
|
||||
"sender='org.freedesktop.systemd1',"
|
||||
"interface='org.freedesktop.DBus.Properties',"
|
||||
"member='PropertiesChanged',"
|
||||
"arg0='org.freedesktop.systemd1.Unit'",
|
||||
match_properties_changed,
|
||||
m);
|
||||
r = sd_bus_match_signal_async(
|
||||
m->bus,
|
||||
NULL,
|
||||
"org.freedesktop.systemd1",
|
||||
NULL,
|
||||
"org.freedesktop.DBus.Properties",
|
||||
"PropertiesChanged",
|
||||
match_properties_changed, NULL, m);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to add match for PropertiesChanged: %m");
|
||||
return log_error_errno(r, "Failed to request match for PropertiesChanged: %m");
|
||||
|
||||
r = sd_bus_add_match(m->bus,
|
||||
NULL,
|
||||
"type='signal',"
|
||||
"sender='org.freedesktop.systemd1',"
|
||||
"interface='org.freedesktop.systemd1.Manager',"
|
||||
"member='Reloading',"
|
||||
"path='/org/freedesktop/systemd1'",
|
||||
match_reloading,
|
||||
m);
|
||||
r = sd_bus_match_signal_async(
|
||||
m->bus,
|
||||
NULL,
|
||||
"org.freedesktop.systemd1",
|
||||
"/org/freedesktop/systemd1",
|
||||
"org.freedesktop.systemd1.Manager",
|
||||
"Reloading",
|
||||
match_reloading, NULL, m);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to add match for Reloading: %m");
|
||||
return log_error_errno(r, "Failed to request match for Reloading: %m");
|
||||
|
||||
r = sd_bus_call_method(
|
||||
m->bus,
|
||||
|
||||
Reference in New Issue
Block a user