Fwd: libev doesn't notify on read event (file FD and timers)

Marc Lehmann schmorp at schmorp.de
Fri Apr 25 04:31:01 CEST 2014


On Thu, Apr 24, 2014 at 11:30:09AM +0300, Assaf Inbal <shmuelzon at gmail.com> wrote:
> I'm using libev as a part of a larger project. In this project I have a
> library that does some asynchronous work directly over FDs and timers.
> While I understand that it's not exactly recommended, these FDs can also be
> of local files as well as sockets.

It's not so much not recommended, but it makes no sense - the fact that
you use "asynchronous" (no, it's not asynchronous) and O_NONBLOCK (has
no effect on file I/O) for file I/O seems to indicate that you think
that nonblocking I/O on files is somehow asynchronous or different from
blocking I/O.

The reason why libev supports files is to simplify programs that read e.g.
from pipes/stdin, which makes them fall back gracefully to blocking file
I/O.

All that explicitly using files with I/O watchers does is make your
program more complex and slower - libev simply calls your callback on
every iteration when it detects that you are using a file.

> I also tried to locally compile 4.15 but the issue reproduced there as well
> (assuming I did so correctly).

I can't see anything obviously wrong with your program, and can't try it out
right now (but will do so later).

Does it only fail with the epoll backend? (try running with LIBEV_FLAGS=2
in your environment to test) - it could be a bug in the code that
generates fake events for files.

If, as I suspect from your program, you deliberately use watchers for file
descriptors that are known files the fix or workaround is easy though:
just do your I/O directly, that's faster and simpler.

-- 
                The choice of a       Deliantra, the free code+content MORPG
      -----==-     _GNU_              http://www.deliantra.net
      ----==-- _       generation
      ---==---(_)__  __ ____  __      Marc Lehmann
      --==---/ / _ \/ // /\ \/ /      schmorp at schmorp.de
      -=====/_/_//_/\_,_/ /_/\_\



More information about the libev mailing list