[systemd-commits] src/bus-proxyd src/libsystemd-bus

Lennart Poettering lennart at kemper.freedesktop.org
Sat Jan 11 18:57:26 PST 2014


 src/bus-proxyd/bus-proxyd.c |   18 ++++++++++++++----
 src/libsystemd-bus/sd-bus.c |   24 ++++++++++++++++--------
 2 files changed, 30 insertions(+), 12 deletions(-)

New commits:
commit 441d56a12a90bbb5f6e58717a1e6b9bfe5c82efc
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sun Jan 12 10:56:40 2014 +0800

    bus: properly handle EOF error conditions in proxyd
    
    EOF is not an error so we should not print an error message about it.

diff --git a/src/bus-proxyd/bus-proxyd.c b/src/bus-proxyd/bus-proxyd.c
index a14d7c8..f4d6fab 100644
--- a/src/bus-proxyd/bus-proxyd.c
+++ b/src/bus-proxyd/bus-proxyd.c
@@ -608,8 +608,13 @@ int main(int argc, char *argv[]) {
 
                                 k = sd_bus_send(b, m, NULL);
                                 if (k < 0) {
-                                        r = k;
-                                        log_error("Failed to send message: %s", strerror(-r));
+                                        if (k == -ECONNRESET)
+                                                r = 0;
+                                        else {
+                                                r = k;
+                                                log_error("Failed to send message: %s", strerror(-r));
+                                        }
+
                                         goto finish;
                                 }
                         }
@@ -653,8 +658,13 @@ int main(int argc, char *argv[]) {
 
                                 k = sd_bus_send(a, m, NULL);
                                 if (k < 0) {
-                                        r = k;
-                                        log_error("Failed to send message: %s", strerror(-r));
+                                        if (r == -ECONNRESET)
+                                                r = 0;
+                                        else {
+                                                r = k;
+                                                log_error("Failed to send message: %s", strerror(-r));
+                                        }
+
                                         goto finish;
                                 }
                         }
diff --git a/src/libsystemd-bus/sd-bus.c b/src/libsystemd-bus/sd-bus.c
index 7f3ecbf..6bd1eaa 100644
--- a/src/libsystemd-bus/sd-bus.c
+++ b/src/libsystemd-bus/sd-bus.c
@@ -1499,7 +1499,7 @@ _public_ int sd_bus_send(sd_bus *bus, sd_bus_message *_m, uint64_t *cookie) {
         if (r < 0)
                 return r;
 
-        /* Remarshall if we have to. This will possible unref the
+        /* Remarshall if we have to. This will possibly unref the
          * message and place a replacement in m */
         r = bus_remarshal_message(bus, &m);
         if (r < 0)
@@ -1515,8 +1515,10 @@ _public_ int sd_bus_send(sd_bus *bus, sd_bus_message *_m, uint64_t *cookie) {
 
                 r = bus_write_message(bus, m, &idx);
                 if (r < 0) {
-                        if (r == -EPIPE || r == -ENOTCONN || r == -ESHUTDOWN)
+                        if (r == -ENOTCONN || r == -ECONNRESET || r == -EPIPE || r == -ESHUTDOWN) {
                                 bus_enter_closing(bus);
+                                return -ECONNRESET;
+                        }
 
                         return r;
                 } else if (!bus->is_kernel && idx < BUS_MESSAGE_SIZE(m))  {
@@ -1799,8 +1801,10 @@ _public_ int sd_bus_call(
 
                 r = bus_read_message(bus);
                 if (r < 0) {
-                        if (r == -EPIPE || r == -ENOTCONN || r == -ESHUTDOWN)
+                        if (r == -ENOTCONN || r == -ECONNRESET || r == -EPIPE || r == -ESHUTDOWN) {
                                 bus_enter_closing(bus);
+                                return -ECONNRESET;
+                        }
 
                         return r;
                 }
@@ -1826,8 +1830,10 @@ _public_ int sd_bus_call(
 
                 r = dispatch_wqueue(bus);
                 if (r < 0) {
-                        if (r == -EPIPE || r == -ENOTCONN || r == -ESHUTDOWN)
+                        if (r == -ENOTCONN || r == -ECONNRESET || r == -EPIPE || r == -ESHUTDOWN) {
                                 bus_enter_closing(bus);
+                                return -ECONNRESET;
+                        }
 
                         return r;
                 }
@@ -2325,7 +2331,7 @@ _public_ int sd_bus_process(sd_bus *bus, sd_bus_message **ret) {
 
         case BUS_OPENING:
                 r = bus_socket_process_opening(bus);
-                if (r == -ECONNRESET || r == -EPIPE || r == -ESHUTDOWN) {
+                if (r == -ENOTCONN || r == -ECONNRESET || r == -EPIPE || r == -ESHUTDOWN) {
                         bus_enter_closing(bus);
                         r = 1;
                 } else if (r < 0)
@@ -2336,7 +2342,7 @@ _public_ int sd_bus_process(sd_bus *bus, sd_bus_message **ret) {
 
         case BUS_AUTHENTICATING:
                 r = bus_socket_process_authenticating(bus);
-                if (r == -ECONNRESET || r == -EPIPE || r == -ESHUTDOWN) {
+                if (r == -ENOTCONN || r == -ECONNRESET || r == -EPIPE || r == -ESHUTDOWN) {
                         bus_enter_closing(bus);
                         r = 1;
                 } else if (r < 0)
@@ -2350,7 +2356,7 @@ _public_ int sd_bus_process(sd_bus *bus, sd_bus_message **ret) {
         case BUS_RUNNING:
         case BUS_HELLO:
                 r = process_running(bus, ret);
-                if (r == -ECONNRESET || r == -EPIPE || r == -ESHUTDOWN) {
+                if (r == -ENOTCONN || r == -ECONNRESET || r == -EPIPE || r == -ESHUTDOWN) {
                         bus_enter_closing(bus);
                         r = 1;
 
@@ -2462,8 +2468,10 @@ _public_ int sd_bus_flush(sd_bus *bus) {
         for (;;) {
                 r = dispatch_wqueue(bus);
                 if (r < 0) {
-                        if (r == -EPIPE || r == -ENOTCONN || r == -ESHUTDOWN)
+                        if (r == -ENOTCONN || r == -ECONNRESET || r == -EPIPE || r == -ESHUTDOWN) {
                                 bus_enter_closing(bus);
+                                return -ECONNRESET;
+                        }
 
                         return r;
                 }



More information about the systemd-commits mailing list