Zbigniew Jędrzejewski-Szmek 62fe94
From ed3a9f6a30958ef90a24bc60aec86493974101d3 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 62fe94
From: David Herrmann <dh.herrmann@gmail.com>
Zbigniew Jędrzejewski-Szmek 62fe94
Date: Mon, 22 Sep 2014 17:55:31 +0200
Zbigniew Jędrzejewski-Szmek 62fe94
Subject: [PATCH] terminal: handle callback errors in sysview instead of
Zbigniew Jędrzejewski-Szmek 62fe94
 propagating them
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
We cannot sanely propagate error codes if we call into user-callbacks
Zbigniew Jędrzejewski-Szmek 62fe94
multiple times for multiple objects. There is no way to merge those errors
Zbigniew Jędrzejewski-Szmek 62fe94
or somehow propagate them.
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
However, we can just act similar to sd-event and print a log-message while
Zbigniew Jędrzejewski-Szmek 62fe94
discarding the values. This way, we allow error-returns, but can properly
Zbigniew Jędrzejewski-Szmek 62fe94
continue working on our objects.
Zbigniew Jędrzejewski-Szmek 62fe94
---
Zbigniew Jędrzejewski-Szmek 62fe94
 src/libsystemd-terminal/sysview.c | 175 +++++++++++++++++---------------------
Zbigniew Jędrzejewski-Szmek 62fe94
 1 file changed, 76 insertions(+), 99 deletions(-)
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/libsystemd-terminal/sysview.c b/src/libsystemd-terminal/sysview.c
Zbigniew Jędrzejewski-Szmek 62fe94
index 208c6ce25c..969514ad9d 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/libsystemd-terminal/sysview.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/libsystemd-terminal/sysview.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -272,7 +272,7 @@ static int session_take_control_fn(sd_bus *bus,
Zbigniew Jędrzejewski-Szmek 62fe94
                                    void *userdata,
Zbigniew Jędrzejewski-Szmek 62fe94
                                    sd_bus_error *ret_error) {
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_session *session = userdata;
Zbigniew Jędrzejewski-Szmek 62fe94
-        int error;
Zbigniew Jędrzejewski-Szmek 62fe94
+        int r, error;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         session->slot_take_control = sd_bus_slot_unref(session->slot_take_control);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -287,7 +287,12 @@ static int session_take_control_fn(sd_bus *bus,
Zbigniew Jędrzejewski-Szmek 62fe94
                 error = 0;
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        return context_raise_session_control(session->seat->context, session, error);
Zbigniew Jędrzejewski-Szmek 62fe94
+        r = context_raise_session_control(session->seat->context, session, error);
Zbigniew Jędrzejewski-Szmek 62fe94
+        if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                log_debug("sysview: callback failed while signalling session control '%d' on session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
+                          error, session->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+        return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 int sysview_session_take_control(sysview_session *session) {
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -548,10 +553,10 @@ static int context_raise_session_refresh(sysview_context *c, sysview_session *se
Zbigniew Jędrzejewski-Szmek 62fe94
         return context_raise(c, &event, 0);
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-static int context_add_device(sysview_context *c, sysview_device *device) {
Zbigniew Jędrzejewski-Szmek 62fe94
+static void context_add_device(sysview_context *c, sysview_device *device) {
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_session *session;
Zbigniew Jędrzejewski-Szmek 62fe94
-        int r, error = 0;
Zbigniew Jędrzejewski-Szmek 62fe94
         Iterator i;
Zbigniew Jędrzejewski-Szmek 62fe94
+        int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(c);
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(device);
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -564,20 +569,16 @@ static int context_add_device(sysview_context *c, sysview_device *device) {
Zbigniew Jędrzejewski-Szmek 62fe94
                         continue;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                 r = context_raise_session_attach(c, session, device);
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r != 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                        error = r;
Zbigniew Jędrzejewski-Szmek 62fe94
+                if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                        log_debug("sysview: callback failed while attaching device '%s' to session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
+                                  device->name, session->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
-        if (error < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                log_debug("sysview: error while adding device '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
-                          device->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
-        return error;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-static int context_remove_device(sysview_context *c, sysview_device *device) {
Zbigniew Jędrzejewski-Szmek 62fe94
+static void context_remove_device(sysview_context *c, sysview_device *device) {
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_session *session;
Zbigniew Jędrzejewski-Szmek 62fe94
-        int r, error = 0;
Zbigniew Jędrzejewski-Szmek 62fe94
         Iterator i;
Zbigniew Jędrzejewski-Szmek 62fe94
+        int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(c);
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(device);
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -589,21 +590,18 @@ static int context_remove_device(sysview_context *c, sysview_device *device) {
Zbigniew Jędrzejewski-Szmek 62fe94
                         continue;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                 r = context_raise_session_detach(c, session, device);
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r != 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                        error = r;
Zbigniew Jędrzejewski-Szmek 62fe94
+                if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                        log_debug("sysview: callback failed while detaching device '%s' from session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
+                                  device->name, session->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        if (error < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                log_debug("sysview: error while removing device '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
-                          device->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_device_free(device);
Zbigniew Jędrzejewski-Szmek 62fe94
-        return error;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-static int context_change_device(sysview_context *c, sysview_device *device, struct udev_device *ud) {
Zbigniew Jędrzejewski-Szmek 62fe94
+static void context_change_device(sysview_context *c, sysview_device *device, struct udev_device *ud) {
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_session *session;
Zbigniew Jędrzejewski-Szmek 62fe94
-        int r, error = 0;
Zbigniew Jędrzejewski-Szmek 62fe94
         Iterator i;
Zbigniew Jędrzejewski-Szmek 62fe94
+        int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(c);
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(device);
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -615,21 +613,17 @@ static int context_change_device(sysview_context *c, sysview_device *device, str
Zbigniew Jędrzejewski-Szmek 62fe94
                         continue;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                 r = context_raise_session_refresh(c, session, device, ud);
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r != 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                        error = r;
Zbigniew Jędrzejewski-Szmek 62fe94
+                if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                        log_debug("sysview: callback failed while changing device '%s' on session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
+                                  device->name, session->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
-        if (error < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                log_debug("sysview: error while changing device '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
-                          device->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
-        return error;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-static int context_add_session(sysview_context *c, sysview_seat *seat, const char *id) {
Zbigniew Jędrzejewski-Szmek 62fe94
+static void context_add_session(sysview_context *c, sysview_seat *seat, const char *id) {
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_session *session;
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_device *device;
Zbigniew Jędrzejewski-Szmek 62fe94
-        int r, error = 0;
Zbigniew Jędrzejewski-Szmek 62fe94
         Iterator i;
Zbigniew Jędrzejewski-Szmek 62fe94
+        int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(c);
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(seat);
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -637,7 +631,7 @@ static int context_add_session(sysview_context *c, sysview_seat *seat, const cha
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         session = sysview_find_session(c, id);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (session)
Zbigniew Jędrzejewski-Szmek 62fe94
-                return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
+                return;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         log_debug("sysview: add session '%s' on seat '%s'", id, seat->name);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -654,35 +648,33 @@ static int context_add_session(sysview_context *c, sysview_seat *seat, const cha
Zbigniew Jędrzejewski-Szmek 62fe94
         if (seat->public) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 session->public = true;
Zbigniew Jędrzejewski-Szmek 62fe94
                 r = context_raise_session_add(c, session);
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r != 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                if (r < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                        log_debug("sysview: callback failed while adding session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
+                                  session->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
                         session->public = false;
Zbigniew Jędrzejewski-Szmek 62fe94
                         goto error;
Zbigniew Jędrzejewski-Szmek 62fe94
                 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                 HASHMAP_FOREACH(device, seat->device_map, i) {
Zbigniew Jędrzejewski-Szmek 62fe94
                         r = context_raise_session_attach(c, session, device);
Zbigniew Jędrzejewski-Szmek 62fe94
-                        if (r != 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                                error = r;
Zbigniew Jędrzejewski-Szmek 62fe94
+                        if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                                log_debug("sysview: callback failed while attaching device '%s' to new session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
+                                          device->name, session->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
                 }
Zbigniew Jędrzejewski-Szmek 62fe94
-
Zbigniew Jędrzejewski-Szmek 62fe94
-                r = error;
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r != 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                        goto error;
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
+        return;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 error:
Zbigniew Jędrzejewski-Szmek 62fe94
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                 log_debug("sysview: error while adding session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
                           id, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
-        return r;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-static int context_remove_session(sysview_context *c, sysview_session *session) {
Zbigniew Jędrzejewski-Szmek 62fe94
+static void context_remove_session(sysview_context *c, sysview_session *session) {
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_device *device;
Zbigniew Jędrzejewski-Szmek 62fe94
-        int r, error = 0;
Zbigniew Jędrzejewski-Szmek 62fe94
         Iterator i;
Zbigniew Jędrzejewski-Szmek 62fe94
+        int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(c);
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(session);
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -692,27 +684,25 @@ static int context_remove_session(sysview_context *c, sysview_session *session)
Zbigniew Jędrzejewski-Szmek 62fe94
         if (session->public) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 HASHMAP_FOREACH(device, session->seat->device_map, i) {
Zbigniew Jędrzejewski-Szmek 62fe94
                         r = context_raise_session_detach(c, session, device);
Zbigniew Jędrzejewski-Szmek 62fe94
-                        if (r != 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                                error = r;
Zbigniew Jędrzejewski-Szmek 62fe94
+                        if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                                log_debug("sysview: callback failed while detaching device '%s' from old session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
+                                          device->name, session->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
                 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                 session->public = false;
Zbigniew Jędrzejewski-Szmek 62fe94
                 r = context_raise_session_remove(c, session);
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r != 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                        error = r;
Zbigniew Jędrzejewski-Szmek 62fe94
+                if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                        log_debug("sysview: callback failed while removing session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
+                                  session->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         if (!session->custom)
Zbigniew Jędrzejewski-Szmek 62fe94
                 sysview_session_release_control(session);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        if (error < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                log_debug("sysview: error while removing session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
-                          session->name, strerror(-error));
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_session_free(session);
Zbigniew Jędrzejewski-Szmek 62fe94
-        return error;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-static int context_add_seat(sysview_context *c, const char *id) {
Zbigniew Jędrzejewski-Szmek 62fe94
+static void context_add_seat(sysview_context *c, const char *id) {
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_seat *seat;
Zbigniew Jędrzejewski-Szmek 62fe94
         int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -721,7 +711,7 @@ static int context_add_seat(sysview_context *c, const char *id) {
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         seat = sysview_find_seat(c, id);
Zbigniew Jędrzejewski-Szmek 62fe94
         if (seat)
Zbigniew Jędrzejewski-Szmek 62fe94
-                return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
+                return;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         log_debug("sysview: add seat '%s'", id);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -731,54 +721,45 @@ static int context_add_seat(sysview_context *c, const char *id) {
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         seat->public = true;
Zbigniew Jędrzejewski-Szmek 62fe94
         r = context_raise_seat_add(c, seat);
Zbigniew Jędrzejewski-Szmek 62fe94
-        if (r != 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
+        if (r < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                log_debug("sysview: callback failed while adding seat '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
+                          seat->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
                 seat->public = false;
Zbigniew Jędrzejewski-Szmek 62fe94
-                goto error;
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
+        return;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 error:
Zbigniew Jędrzejewski-Szmek 62fe94
         if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                 log_debug("sysview: error while adding seat '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
                           id, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
-        return r;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-static int context_remove_seat(sysview_context *c, sysview_seat *seat) {
Zbigniew Jędrzejewski-Szmek 62fe94
+static void context_remove_seat(sysview_context *c, sysview_seat *seat) {
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_session *session;
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_device *device;
Zbigniew Jędrzejewski-Szmek 62fe94
-        int r, error = 0;
Zbigniew Jędrzejewski-Szmek 62fe94
+        int r;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(c);
Zbigniew Jędrzejewski-Szmek 62fe94
         assert(seat);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         log_debug("sysview: remove seat '%s'", seat->name);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        while ((device = hashmap_first(seat->device_map))) {
Zbigniew Jędrzejewski-Szmek 62fe94
-                r = context_remove_device(c, device);
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r != 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                        error = r;
Zbigniew Jędrzejewski-Szmek 62fe94
-        }
Zbigniew Jędrzejewski-Szmek 62fe94
+        while ((device = hashmap_first(seat->device_map)))
Zbigniew Jędrzejewski-Szmek 62fe94
+                context_remove_device(c, device);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        while ((session = hashmap_first(seat->session_map))) {
Zbigniew Jędrzejewski-Szmek 62fe94
-                r = context_remove_session(c, session);
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r != 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                        error = r;
Zbigniew Jędrzejewski-Szmek 62fe94
-        }
Zbigniew Jędrzejewski-Szmek 62fe94
+        while ((session = hashmap_first(seat->session_map)))
Zbigniew Jędrzejewski-Szmek 62fe94
+                context_remove_session(c, session);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         if (seat->public) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 seat->public = false;
Zbigniew Jędrzejewski-Szmek 62fe94
                 r = context_raise_seat_remove(c, seat);
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r != 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                        error = r;
Zbigniew Jędrzejewski-Szmek 62fe94
+                if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                        log_debug("sysview: callback failed while removing seat '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
+                                  seat->name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        if (error < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                log_debug("sysview: error while removing seat '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
-                          seat->name, strerror(-error));
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_seat_free(seat);
Zbigniew Jędrzejewski-Szmek 62fe94
-        return error;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 int sysview_context_new(sysview_context **out,
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -923,12 +904,12 @@ static int context_ud_hotplug(sysview_context *c, struct udev_device *d) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (!device)
Zbigniew Jędrzejewski-Szmek 62fe94
                         return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-                return context_remove_device(c, device);
Zbigniew Jędrzejewski-Szmek 62fe94
+                context_remove_device(c, device);
Zbigniew Jędrzejewski-Szmek 62fe94
         } else if (streq_ptr(action, "change")) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (!device)
Zbigniew Jędrzejewski-Szmek 62fe94
                         return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-                return context_change_device(c, device, d);
Zbigniew Jędrzejewski-Szmek 62fe94
+                context_change_device(c, device, d);
Zbigniew Jędrzejewski-Szmek 62fe94
         } else if (!action || streq_ptr(action, "add")) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 struct udev_device *p;
Zbigniew Jędrzejewski-Szmek 62fe94
                 unsigned int type, t;
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -966,7 +947,7 @@ static int context_ud_hotplug(sysview_context *c, struct udev_device *d) {
Zbigniew Jędrzejewski-Szmek 62fe94
                         return r;
Zbigniew Jędrzejewski-Szmek 62fe94
                 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-                return context_add_device(c, device);
Zbigniew Jędrzejewski-Szmek 62fe94
+                context_add_device(c, device);
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -1093,7 +1074,8 @@ static int context_ld_seat_new(sysview_context *c, sd_bus_message *signal) {
Zbigniew Jędrzejewski-Szmek 62fe94
                 return r;
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        return context_add_seat(c, id);
Zbigniew Jędrzejewski-Szmek 62fe94
+        context_add_seat(c, id);
Zbigniew Jędrzejewski-Szmek 62fe94
+        return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 static int context_ld_seat_removed(sysview_context *c, sd_bus_message *signal) {
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -1112,7 +1094,8 @@ static int context_ld_seat_removed(sysview_context *c, sd_bus_message *signal) {
Zbigniew Jędrzejewski-Szmek 62fe94
         if (!seat)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        return context_remove_seat(c, seat);
Zbigniew Jędrzejewski-Szmek 62fe94
+        context_remove_seat(c, seat);
Zbigniew Jędrzejewski-Szmek 62fe94
+        return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 static int context_ld_session_new(sysview_context *c, sd_bus_message *signal) {
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -1159,14 +1142,13 @@ static int context_ld_session_new(sysview_context *c, sd_bus_message *signal) {
Zbigniew Jędrzejewski-Szmek 62fe94
         }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         r = context_raise_session_filter(c, id, seatid, username, uid);
Zbigniew Jędrzejewski-Szmek 62fe94
-        if (r <= 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                        log_debug("sysview: cannot filter new session '%s' on seat '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
-                                  id, seatid, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
-                return r;
Zbigniew Jędrzejewski-Szmek 62fe94
-        }
Zbigniew Jędrzejewski-Szmek 62fe94
+        if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                log_debug("sysview: callback failed while filtering session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
+                          id, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
+        else if (r > 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                context_add_session(c, seat, id);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        return context_add_session(c, seat, id);
Zbigniew Jędrzejewski-Szmek 62fe94
+        return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 error:
Zbigniew Jędrzejewski-Szmek 62fe94
         log_debug("sysview: failed retrieving information for new session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -1190,7 +1172,8 @@ static int context_ld_session_removed(sysview_context *c, sd_bus_message *signal
Zbigniew Jędrzejewski-Szmek 62fe94
         if (!session)
Zbigniew Jędrzejewski-Szmek 62fe94
                 return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-        return context_remove_session(c, session);
Zbigniew Jędrzejewski-Szmek 62fe94
+        context_remove_session(c, session);
Zbigniew Jędrzejewski-Szmek 62fe94
+        return 0;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 static int context_ld_manager_signal_fn(sd_bus *bus,
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -1265,9 +1248,7 @@ static int context_ld_list_seats_fn(sd_bus *bus,
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
                         goto error;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
-                r = context_add_seat(c, id);
Zbigniew Jędrzejewski-Szmek 62fe94
-                if (r != 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                        return r;
Zbigniew Jędrzejewski-Szmek 62fe94
+                context_add_seat(c, id);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                 r = sd_bus_message_exit_container(reply);
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -1328,15 +1309,11 @@ static int context_ld_list_sessions_fn(sd_bus *bus,
Zbigniew Jędrzejewski-Szmek 62fe94
                 seat = sysview_find_seat(c, seatid);
Zbigniew Jędrzejewski-Szmek 62fe94
                 if (seat) {
Zbigniew Jędrzejewski-Szmek 62fe94
                         r = context_raise_session_filter(c, id, seatid, username, uid);
Zbigniew Jędrzejewski-Szmek 62fe94
-                        if (r < 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
-                                log_debug("sysview: cannot filter listed session '%s' on seat '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
-                                          id, seatid, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
-                                return r;
Zbigniew Jędrzejewski-Szmek 62fe94
-                        } else if (r > 0) {
Zbigniew Jędrzejewski-Szmek 62fe94
-                                r = context_add_session(c, seat, id);
Zbigniew Jędrzejewski-Szmek 62fe94
-                                if (r != 0)
Zbigniew Jędrzejewski-Szmek 62fe94
-                                        return r;
Zbigniew Jędrzejewski-Szmek 62fe94
-                        }
Zbigniew Jędrzejewski-Szmek 62fe94
+                        if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                                log_debug("sysview: callback failed while filtering session '%s': %s",
Zbigniew Jędrzejewski-Szmek 62fe94
+                                          id, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
+                        else if (r > 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                                context_add_session(c, seat, id);
Zbigniew Jędrzejewski-Szmek 62fe94
                 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
                 r = sd_bus_message_exit_container(reply);