oh wait, this doesn't build, here is a version that builds
On Fri, Nov 22, 2013 at 6:56 PM, Shawn Landden <[email protected]> wrote:
> With EPOLLONESHOT we are guaranteed to only recieve one event
> until we reload with socket_enter_listening(s), otherwise
> multiple events can be generated upon receipt of multiple chunks of data.
>
> We also only want wake-ups when external events happen, i.e.
> edge-triggered wakeups.
> ---
> src/core/socket.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/src/core/socket.c b/src/core/socket.c
> index 5fa4a5a..2f860a4 100644
> --- a/src/core/socket.c
> +++ b/src/core/socket.c
> @@ -1119,7 +1119,9 @@ static int socket_watch_fds(Socket *s) {
> if (p->event_source)
> r = sd_event_source_set_enabled(p->event_source,
> SD_EVENT_ON);
> else
> - r = sd_event_add_io(UNIT(s)->manager->event, p->fd,
> EPOLLIN, socket_dispatch_io, p, &p->event_source);
> + r = sd_event_add_io(UNIT(s)->manager->event, p->fd,
> + EPOLLIN|EPOLLET|((s->accept ||
> s->distribute) ? 0 : EPOLLONESHOT),
> + socket_dispatch_io, p,
> &p->event_source);
>
> if (r < 0) {
> log_warning_unit(UNIT(s)->id, "Failed to watch
> listening fds: %s", strerror(-r));
> --
> 1.8.4.4
>
From 9ee3855eceeab5bf2f0a2de8f0989b8e3fcef8d3 Mon Sep 17 00:00:00 2001
From: Shawn Landden <[email protected]>
Date: Wed, 20 Nov 2013 00:55:23 -0800
Subject: [PATCH] core/socket: we only want one event on standard sockets
With EPOLLONESHOT we are guaranteed to only recieve one event
until we reload with socket_enter_listening(s), otherwise
multiple events can be generated upon receipt of multiple chunks of data.
We also only want wake-ups when external events happen, i.e.
edge-triggered wakeups.
---
src/core/socket.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/core/socket.c b/src/core/socket.c
index 5fa4a5a..666ee39 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -1119,7 +1119,9 @@ static int socket_watch_fds(Socket *s) {
if (p->event_source)
r = sd_event_source_set_enabled(p->event_source, SD_EVENT_ON);
else
- r = sd_event_add_io(UNIT(s)->manager->event, p->fd, EPOLLIN, socket_dispatch_io, p, &p->event_source);
+ r = sd_event_add_io(UNIT(s)->manager->event, p->fd,
+ EPOLLIN|EPOLLET|(s->accept ? 0 : EPOLLONESHOT),
+ socket_dispatch_io, p, &p->event_source);
if (r < 0) {
log_warning_unit(UNIT(s)->id, "Failed to watch listening fds: %s", strerror(-r));
--
1.8.4.4
_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel