summaryrefslogtreecommitdiff
path: root/src/bus-proxyd/proxy.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-02-13 17:17:45 +0100
committerLennart Poettering <lennart@poettering.net>2015-02-13 17:18:36 +0100
commitc74f883c6f7d5901b3c543d47f64082ccd91a895 (patch)
tree21f92eb1e6e61d18921679f8b6a02e13dcc480d6 /src/bus-proxyd/proxy.c
parent5569b33a8ce1968200db801ef28585347103239c (diff)
bus-proxy: ECONNRESET/ENOTCONN can hit us on every step, hence handle it on every step
Diffstat (limited to 'src/bus-proxyd/proxy.c')
-rw-r--r--src/bus-proxyd/proxy.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/bus-proxyd/proxy.c b/src/bus-proxyd/proxy.c
index a34c431096..73f68b7874 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;
}