X-Git-Url: https://git.llucax.com/software/libev.git/blobdiff_plain/f2a9defa2bdaf750790aae6cea75cf23b945189e..80f561c62ce8d30b87e4298b954ce280c4b5465f:/ev.c diff --git a/ev.c b/ev.c index 25776bf..000c369 100644 --- a/ev.c +++ b/ev.c @@ -28,6 +28,11 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#ifdef __cplusplus +extern "C" { +#endif + #ifndef EV_STANDALONE # include "config.h" @@ -48,7 +53,7 @@ # define EV_USE_EPOLL 1 # endif -# if HAVE_KQUEUE && HAVE_WORKING_KQUEUE && HAVE_SYS_EVENT_H && HAVE_SYS_QUEUE_H +# if HAVE_KQUEUE && HAVE_SYS_EVENT_H && HAVE_SYS_QUEUE_H # define EV_USE_KQUEUE 1 # endif @@ -984,7 +989,11 @@ timers_reify (EV_P) if (w->repeat) { assert (("negative ev_timer repeat value found while processing timers", w->repeat > 0.)); - ((WT)w)->at = mn_now + w->repeat; + + ((WT)w)->at += w->repeat; + if (((WT)w)->at < mn_now) + ((WT)w)->at = mn_now; + downheap ((WT *)timers, timercnt, 0); } else @@ -1289,6 +1298,8 @@ ev_io_stop (EV_P_ struct ev_io *w) if (!ev_is_active (w)) return; + assert (("ev_io_start called with illegal fd (must stay constant after start!)", w->fd >= 0 && w->fd < anfdmax)); + wlist_del ((WL *)&anfds[w->fd].head, (WL)w); ev_stop (EV_A_ (W)w); @@ -1328,7 +1339,7 @@ ev_timer_stop (EV_P_ struct ev_timer *w) downheap ((WT *)timers, timercnt, ((W)w)->active - 1); } - ((WT)w)->at = w->repeat; + ((WT)w)->at -= mn_now; ev_stop (EV_A_ (W)w); } @@ -1596,3 +1607,7 @@ ev_once (EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revents, vo } } +#ifdef __cplusplus +} +#endif +