summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-11-06 23:59:07 +0100
committerLennart Poettering <lennart@poettering.net>2013-11-07 00:13:58 +0100
commitb7484e2a58038c57591457c1439505607bdcd833 (patch)
tree0d4de763a26ec05e87bdc0ba203a955f19653334
parent5b84559a76f30755019d6a0e6b2ccc9bbe0b3c56 (diff)
event: make sure we keep a reference to all events we dispatch while we do so.
-rw-r--r--src/libsystemd-bus/sd-event.c4
-rw-r--r--src/socket-proxy/socket-proxyd.c8
2 files changed, 11 insertions, 1 deletions
diff --git a/src/libsystemd-bus/sd-event.c b/src/libsystemd-bus/sd-event.c
index 9c641c9a8e..97e6db289b 100644
--- a/src/libsystemd-bus/sd-event.c
+++ b/src/libsystemd-bus/sd-event.c
@@ -1614,6 +1614,8 @@ static int source_dispatch(sd_event_source *s) {
return r;
}
+ sd_event_source_ref(s);
+
switch (s->type) {
case SOURCE_IO:
@@ -1645,6 +1647,8 @@ static int source_dispatch(sd_event_source *s) {
break;
}
+ sd_event_source_unref(s);
+
return r;
}
diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c
index 1c64c0e2e5..12d58d4406 100644
--- a/src/socket-proxy/socket-proxyd.c
+++ b/src/socket-proxy/socket-proxyd.c
@@ -338,7 +338,7 @@ static int connection_enable_event_sources(Connection *c, sd_event *event) {
r = 0;
if (r < 0) {
- log_error("Failed to set up server event source: %s", strerror(-r));
+ log_error("Failed to set up client event source: %s", strerror(-r));
return r;
}
@@ -434,6 +434,12 @@ static int add_connection_socket(Context *context, sd_event *event, int fd) {
log_error("Failed to add connection socket: %s", strerror(-r));
goto fail;
}
+
+ r = sd_event_source_set_enabled(c->client_event_source, SD_EVENT_ONESHOT);
+ if (r < 0) {
+ log_error("Failed to enable oneshot event source: %s", strerror(-r));
+ goto fail;
+ }
} else {
log_error("Failed to connect to remote host: %m");
goto fail;