chiark / gitweb /
Prep v234: Re-add user/session to the gc_queue when stopping.
authorSven Eden <yamakuzure@gmx.net>
Wed, 26 Jul 2017 08:26:15 +0000 (10:26 +0200)
committerSven Eden <yamakuzure@gmx.net>
Wed, 26 Jul 2017 08:26:15 +0000 (10:26 +0200)
If manager_gc() does not find the user/session, their respective
finalize_*() method is never called, leaving stale state files in
/run/systemd/sessions and run/systemd/users.

src/login/logind-session.c
src/login/logind-user.c

index 28784a86759041c0276af423c26f786f35d21794..10e9327c0f2e41289843aba2044bda9d8de7a18a 100644 (file)
@@ -768,6 +768,10 @@ int session_stop(Session *s, bool force) {
         session_save(s);
         user_save(s->user);
 
+#if 1 /// elogind must queue this session again
+        session_add_to_gc_queue(s);
+#endif // 1
+
         return r;
 }
 
@@ -819,7 +823,6 @@ int session_finalize(Session *s) {
         return 0;
 }
 
-#if 0 /// UNNEEDED by elogind
 static int release_timeout_callback(sd_event_source *es, uint64_t usec, void *userdata) {
         Session *s = userdata;
 
@@ -829,7 +832,6 @@ static int release_timeout_callback(sd_event_source *es, uint64_t usec, void *us
         session_stop(s, false);
         return 0;
 }
-#endif // 0
 
 int session_release(Session *s) {
         assert(s);
@@ -840,18 +842,11 @@ int session_release(Session *s) {
         if (s->timer_event_source)
                 return 0;
 
-#if 0 /// UNNEEDED by elogind
         return sd_event_add_time(s->manager->event,
                                  &s->timer_event_source,
                                  CLOCK_MONOTONIC,
                                  now(CLOCK_MONOTONIC) + RELEASE_USEC, 0,
                                  release_timeout_callback, s);
-#else
-        /* In systemd, session release is triggered by user jobs
-           dying.  In elogind we don't have that so go ahead and stop
-           now.  */
-        return session_stop(s, false);
-#endif // 0
 }
 
 bool session_is_active(Session *s) {
index b8abc6af0135b267ea433a58a048366875025b71..ae1d8b6bd369a683a362c9ec77db9f86b0af0640 100644 (file)
@@ -613,6 +613,10 @@ int user_stop(User *u, bool force) {
 
         user_save(u);
 
+#if 1 /// elogind must queue this user again
+        user_add_to_gc_queue(u);
+#endif // 1
+
         return r;
 }