On Wed, 27.11.13 19:48, David Herrmann (dh.herrm...@gmail.com) wrote: Looks obvious. Applied.
> EPOLLET enables edge-triggered mode (see epoll(7) for more). For most > use-cases, level-triggered is just fine, but for master-TTYs we need > edge-triggered to catch EPOLLHUP. master-TTYs signal EPOLLHUP if no client > is connected, but a client may connect some time later (same happens > during vhangup(2)). > > However, epoll doesn't allow masking EPOLLHUP so it's signaled constantly. > To avoid this, edge-triggered mode is needed. > --- > src/libsystemd-bus/sd-event.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/src/libsystemd-bus/sd-event.c b/src/libsystemd-bus/sd-event.c > index 6a6581b..b5ddf71 100644 > --- a/src/libsystemd-bus/sd-event.c > +++ b/src/libsystemd-bus/sd-event.c > @@ -584,7 +584,7 @@ _public_ int sd_event_add_io( > > assert_return(e, -EINVAL); > assert_return(fd >= 0, -EINVAL); > - assert_return(!(events & > ~(EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLPRI|EPOLLERR|EPOLLHUP)), -EINVAL); > + assert_return(!(events & > ~(EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLPRI|EPOLLERR|EPOLLHUP|EPOLLET)), -EINVAL); > assert_return(callback, -EINVAL); > assert_return(ret, -EINVAL); > assert_return(e->state != SD_EVENT_FINISHED, -ESTALE); > @@ -1022,7 +1022,7 @@ _public_ int > sd_event_source_set_io_events(sd_event_source *s, uint32_t events) > > assert_return(s, -EINVAL); > assert_return(s->type == SOURCE_IO, -EDOM); > - assert_return(!(events & > ~(EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLPRI|EPOLLERR|EPOLLHUP)), -EINVAL); > + assert_return(!(events & > ~(EPOLLIN|EPOLLOUT|EPOLLRDHUP|EPOLLPRI|EPOLLERR|EPOLLHUP|EPOLLET)), -EINVAL); > assert_return(s->event->state != SD_EVENT_FINISHED, -ESTALE); > assert_return(!event_pid_changed(s->event), -ECHILD); > Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel