From c74f883c6f7d5901b3c543d47f64082ccd91a895 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 13 Feb 2015 17:17:45 +0100 Subject: [PATCH] bus-proxy: ECONNRESET/ENOTCONN can hit us on every step, hence handle it on every step --- src/bus-proxyd/proxy.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/bus-proxyd/proxy.c b/src/bus-proxyd/proxy.c index a34c43109..73f68b787 100644 --- a/src/bus-proxyd/proxy.c +++ b/src/bus-proxyd/proxy.c @@ -376,7 +376,7 @@ static int proxy_wait(Proxy *p) { } pollfd = (struct pollfd[3]) { - { .fd = fd, .events = events_destination, }, + { .fd = fd, .events = events_destination, }, { .fd = p->local_in, .events = events_local & POLLIN, }, { .fd = p->local_out, .events = events_local & POLLOUT, }, }; @@ -689,6 +689,8 @@ static int proxy_process_destination_to_local(Proxy *p) { return -ECONNRESET; r = synthesize_name_acquired(p->destination_bus, p->local_bus, m); + if (r == -ECONNRESET || r == -ENOTCONN) + return r; if (r < 0) return log_error_errno(r, "Failed to synthesize message: %m"); @@ -696,6 +698,8 @@ static int proxy_process_destination_to_local(Proxy *p) { if (p->policy) { r = process_policy(p->destination_bus, p->local_bus, m, p->policy, &p->local_creds, p->owned_names); + if (r == -ECONNRESET || r == -ENOTCONN) + return r; if (r < 0) return log_error_errno(r, "Failed to process policy: %m"); if (r > 0) @@ -755,12 +759,16 @@ static int proxy_process_local_to_destination(Proxy *p) { return -ECONNRESET; r = process_hello(p, m); + if (r == -ECONNRESET || r == -ENOTCONN) + return r; if (r < 0) return log_error_errno(r, "Failed to process HELLO: %m"); if (r > 0) return 1; r = bus_proxy_process_driver(p->destination_bus, p->local_bus, m, p->policy, &p->local_creds, p->owned_names); + if (r == -ECONNRESET || r == -ENOTCONN) + return r; if (r < 0) return log_error_errno(r, "Failed to process driver calls: %m"); if (r > 0) @@ -769,9 +777,11 @@ static int proxy_process_local_to_destination(Proxy *p) { for (;;) { if (p->policy) { r = process_policy(p->local_bus, p->destination_bus, m, p->policy, &p->local_creds, p->owned_names); + if (r == -ECONNRESET || r == -ENOTCONN) + return r; if (r < 0) return log_error_errno(r, "Failed to process policy: %m"); - else if (r > 0) + if (r > 0) return 1; } @@ -829,6 +839,8 @@ int proxy_run(Proxy *p) { if (!busy) { r = proxy_wait(p); + if (r == -ECONNRESET || r == -ENOTCONN) + return 0; if (r < 0) return r; } -- 2.30.2