chiark / gitweb /
logind: check return value of session_release
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 15 Mar 2015 20:37:39 +0000 (16:37 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 15 Mar 2015 21:26:58 +0000 (17:26 -0400)
It allocates memory, so it can fail.

CID #1237527.

src/login/logind-dbus.c
src/login/logind-session.c
src/login/logind-session.h

index b28d28093934877feb38c602b0306cbf62be813c..a3d49efbdd45cced85703cbbc19e818c79c3b530 100644 (file)
@@ -827,7 +827,9 @@ static int method_release_session(sd_bus *bus, sd_bus_message *message, void *us
         if (r < 0)
                 return r;
 
-        session_release(session);
+        r = session_release(session);
+        if (r < 0)
+                return r;
 
         return sd_bus_reply_method_return(message, NULL);
 }
index 8d33579a01b7ad9a7928b133755bca0f9bba0f7a..59f765782a668e5d92f188032ec5a848aa79dc11 100644 (file)
@@ -701,18 +701,20 @@ static int release_timeout_callback(sd_event_source *es, uint64_t usec, void *us
         return 0;
 }
 
-void session_release(Session *s) {
+int session_release(Session *s) {
         assert(s);
 
         if (!s->started || s->stopping)
-                return;
+                return 0;
+
+        if (s->timer_event_source)
+                return 0;
 
-        if (!s->timer_event_source)
-                sd_event_add_time(s->manager->event,
-                                  &s->timer_event_source,
-                                  CLOCK_MONOTONIC,
-                                  now(CLOCK_MONOTONIC) + RELEASE_USEC, 0,
-                                  release_timeout_callback, s);
+        return sd_event_add_time(s->manager->event,
+                                 &s->timer_event_source,
+                                 CLOCK_MONOTONIC,
+                                 now(CLOCK_MONOTONIC) + RELEASE_USEC, 0,
+                                 release_timeout_callback, s);
 }
 
 bool session_is_active(Session *s) {
index 0505f7f0bdfd62bc32d018c9398816616565b34c..9305dca83f88e3a3a6956e0c48896034fe41ad15 100644 (file)
@@ -137,7 +137,7 @@ int session_create_fifo(Session *s);
 int session_start(Session *s);
 int session_stop(Session *s, bool force);
 int session_finalize(Session *s);
-void session_release(Session *s);
+int session_release(Session *s);
 int session_save(Session *s);
 int session_load(Session *s);
 int session_kill(Session *s, KillWho who, int signo);