1
0
mirror of https://github.com/systemd/systemd synced 2024-07-08 20:15:55 +00:00

tree-wide: never consider service idle if polkit authentication is still pending

Let's be correct on this.
This commit is contained in:
Lennart Poettering 2024-05-23 09:46:04 +02:00 committed by Luca Boccassi
parent ac908152b3
commit ec8bbd8adb
5 changed files with 36 additions and 7 deletions

View File

@ -1728,9 +1728,10 @@ static int manager_add_bus_objects(Manager *m) {
}
static bool manager_check_idle(void *userdata) {
Manager *m = userdata;
Manager *m = ASSERT_PTR(userdata);
return hashmap_isempty(m->transfers);
return hashmap_isempty(m->transfers) &&
hashmap_isempty(m->polkit_registry);
}
static void manager_parse_env(Manager *m) {

View File

@ -622,6 +622,12 @@ static int connect_bus(Context *c, sd_event *event, sd_bus **_bus) {
return 0;
}
static bool context_check_idle(void *userdata) {
Context *c = ASSERT_PTR(userdata);
return hashmap_isempty(c->polkit_registry);
}
static int run(int argc, char *argv[]) {
_cleanup_(context_clear) Context context = {};
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
@ -662,7 +668,13 @@ static int run(int argc, char *argv[]) {
if (r < 0)
log_warning_errno(r, "Failed to send readiness notification, ignoring: %m");
r = bus_event_loop_with_idle(event, bus, "org.freedesktop.locale1", DEFAULT_EXIT_USEC, NULL, NULL);
r = bus_event_loop_with_idle(
event,
bus,
"org.freedesktop.locale1",
DEFAULT_EXIT_USEC,
context_check_idle,
&context);
if (r < 0)
return log_error_errno(r, "Failed to run event loop: %m");

View File

@ -311,7 +311,7 @@ static int manager_startup(Manager *m) {
}
static bool check_idle(void *userdata) {
Manager *m = userdata;
Manager *m = ASSERT_PTR(userdata);
if (m->operations)
return false;
@ -322,6 +322,9 @@ static bool check_idle(void *userdata) {
if (varlink_server_current_connections(m->varlink_machine_server) > 0)
return false;
if (!hashmap_isempty(m->polkit_registry))
return false;
manager_gc(m, true);
return hashmap_isempty(m->machines);

View File

@ -117,9 +117,10 @@ static int manager_startup(Manager *m) {
}
static bool check_idle(void *userdata) {
Manager *m = userdata;
Manager *m = ASSERT_PTR(userdata);
return !m->operations;
return !m->operations &&
hashmap_isempty(m->polkit_registry);
}
static int run(int argc, char *argv[]) {

View File

@ -1118,6 +1118,12 @@ static int connect_bus(Context *c, sd_event *event, sd_bus **_bus) {
return 0;
}
static bool context_check_idle(void *userdata) {
Context *c = ASSERT_PTR(userdata);
return hashmap_isempty(c->polkit_registry);
}
static int run(int argc, char *argv[]) {
_cleanup_(context_clear) Context context = {};
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
@ -1164,7 +1170,13 @@ static int run(int argc, char *argv[]) {
if (r < 0)
log_warning_errno(r, "Failed to send readiness notification, ignoring: %m");
r = bus_event_loop_with_idle(event, bus, "org.freedesktop.timedate1", DEFAULT_EXIT_USEC, NULL, NULL);
r = bus_event_loop_with_idle(
event,
bus,
"org.freedesktop.timedate1",
DEFAULT_EXIT_USEC,
context_check_idle,
&context);
if (r < 0)
return log_error_errno(r, "Failed to run event loop: %m");