diff options
| -rw-r--r-- | Changes | 4 | ||||
| -rw-r--r-- | ev.c | 8 | ||||
| -rw-r--r-- | ev.pod | 6 | ||||
| -rw-r--r-- | ev_epoll.c | 2 | ||||
| -rw-r--r-- | ev_poll.c | 4 | ||||
| -rw-r--r-- | ev_port.c | 2 | 
6 files changed, 21 insertions, 5 deletions
@@ -1,5 +1,9 @@  Revision history for libev, a high-performance and full-featured event loop. +TODO: signal mask problem documentation +TODO: ev_loop_wakeup +	- do no rely on ceil() in ev_e?poll.c. +  4.03 Tue Jan 11 14:37:25 CET 2011  	- officially support polling files with all backends.  	- support files, /dev/zero etc. the same way as select in the epoll @@ -817,6 +817,14 @@ ev_sleep (ev_tstamp delay)      }  } +inline_speed int +ev_timeout_to_ms (ev_tstamp timeout) +{ +  int ms = timeout * 1000. + .999999; + +  return expect_true (ms) ? ms : timeout < 1e-6 ? 0 : 1; +} +  /*****************************************************************************/  #define MALLOC_ROUND 4096 /* prefer to allocate in chunks of this size, must be 2**n and >> 4 longs */ @@ -444,6 +444,9 @@ This behaviour is useful when you want to do your own signal handling, or  want to handle signals only in specific threads and want to avoid libev  unblocking the signals. +It's also required by POSIX in a threaded program, as libev calls +C<sigprocmask>, whose behaviour is officially unspecified. +  This flag's behaviour will become the default in future versions of libev.  =item C<EVBACKEND_SELECT>  (value 1, portable select backend) @@ -2302,7 +2305,8 @@ and unblock them in an C<ev_prepare> watcher.  Both the signal mask (C<sigprocmask>) and the signal disposition  (C<sigaction>) are unspecified after starting a signal watcher (and after  stopping it again), that is, libev might or might not block the signal, -and might or might not set or restore the installed signal handler. +and might or might not set or restore the installed signal handler (but +see C<EVFLAG_NOSIGMASK>).  While this does not matter for the signal disposition (libev never  sets signals to C<SIG_IGN>, so handlers will be reset to C<SIG_DFL> on @@ -148,7 +148,7 @@ epoll_poll (EV_P_ ev_tstamp timeout)    /* the default libev max wait time, however. */    EV_RELEASE_CB;    eventcnt = epoll_wait (backend_fd, epoll_events, epoll_eventmax, -                         epoll_epermcnt ? 0 : (int)ceil (timeout * 1000.)); +                         epoll_epermcnt ? 0 : ev_timeout_to_ms (timeout));    EV_ACQUIRE_CB;    if (expect_false (eventcnt < 0)) @@ -1,7 +1,7 @@  /*   * libev poll fd activity backend   * - * Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann <libev@schmorp.de> + * Copyright (c) 2007,2008,2009,2010,2011 Marc Alexander Lehmann <libev@schmorp.de>   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without modifica- @@ -92,7 +92,7 @@ poll_poll (EV_P_ ev_tstamp timeout)    int res;    EV_RELEASE_CB; -  res = poll (polls, pollcnt, (int)ceil (timeout * 1000.)); +  res = poll (polls, pollcnt, ev_timeout_to_ms (timeout));    EV_ACQUIRE_CB;    if (expect_false (res < 0)) @@ -1,7 +1,7 @@  /*   * libev solaris event port backend   * - * Copyright (c) 2007,2008,2009,2010 Marc Alexander Lehmann <libev@schmorp.de> + * Copyright (c) 2007,2008,2009,2010,2011 Marc Alexander Lehmann <libev@schmorp.de>   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without modifica-  | 
