chiark / gitweb /
driverd: sort list of names returned by ListNames
[elogind.git] / src / bus-driverd / bus-driverd.c
index d4126a99b6a7d9cafe333c33335af9e8fa2f99b9..de2344503fe56720cf57712e88d159863a6d9346 100644 (file)
@@ -484,6 +484,9 @@ static int driver_list_names(sd_bus *bus, sd_bus_message *m, void *userdata, sd_
         if (r < 0)
                 return r;
 
+        /* Let's sort the names list to make it stable */
+        strv_sort(names);
+
         return return_strv(bus, m, names);
 }
 
@@ -495,6 +498,9 @@ static int driver_list_activatable_names(sd_bus *bus, sd_bus_message *m, void *u
         if (r < 0)
                 return r;
 
+        /* Let's sort the names list to make it stable */
+        strv_sort(names);
+
         return return_strv(bus, m, names);
 }
 
@@ -772,6 +778,13 @@ static int connect_bus(Context *c) {
         return 0;
 }
 
+static bool check_idle(void *userdata) {
+        Context *c = userdata;
+        assert(c);
+
+        return hashmap_isempty(c->clients);
+}
+
 int main(int argc, char *argv[]) {
         Context context = {};
         Client *c;
@@ -799,7 +812,7 @@ int main(int argc, char *argv[]) {
         if (r < 0)
                 goto finish;
 
-        r = bus_event_loop_with_idle(context.event, context.bus, "org.freedesktop.DBus", DEFAULT_EXIT_USEC);
+        r = bus_event_loop_with_idle(context.event, context.bus, "org.freedesktop.DBus", DEFAULT_EXIT_USEC, check_idle, &context);
         if (r < 0) {
                 log_error("Failed to run event loop: %s", strerror(-r));
                 goto finish;