diff --git a/src/login/logind-session.c b/src/login/logind-session.c index e8c3ae621b..7ad34364cf 100644 --- a/src/login/logind-session.c +++ b/src/login/logind-session.c @@ -91,8 +91,13 @@ static int session_dispatch_leader_pidfd(sd_event_source *es, int fd, uint32_t r Session *s = ASSERT_PTR(userdata); assert(s->leader.fd == fd); + + s->leader_pidfd_event_source = sd_event_source_unref(s->leader_pidfd_event_source); + session_stop(s, /* force= */ false); + session_add_to_gc_queue(s); + return 1; } @@ -959,7 +964,6 @@ int session_stop(Session *s, bool force) { return 0; s->timer_event_source = sd_event_source_unref(s->timer_event_source); - s->leader_pidfd_event_source = sd_event_source_unref(s->leader_pidfd_event_source); if (s->seat) seat_evict_position(s->seat, s); @@ -1270,6 +1274,8 @@ static int session_dispatch_fifo(sd_event_source *es, int fd, uint32_t revents, session_remove_fifo(s); session_stop(s, /* force = */ false); + session_add_to_gc_queue(s); + return 1; }