… | |
… | |
167 | #define expect_true(expr) expect ((expr) != 0, 1) |
167 | #define expect_true(expr) expect ((expr) != 0, 1) |
168 | |
168 | |
169 | #define NUMPRI (EV_MAXPRI - EV_MINPRI + 1) |
169 | #define NUMPRI (EV_MAXPRI - EV_MINPRI + 1) |
170 | #define ABSPRI(w) ((w)->priority - EV_MINPRI) |
170 | #define ABSPRI(w) ((w)->priority - EV_MINPRI) |
171 | |
171 | |
172 | #define EMPTY /* required for microsofts broken pseudo-c compiler */ |
172 | #define EMPTY0 /* required for microsofts broken pseudo-c compiler */ |
|
|
173 | #define EMPTY2(a,b) /* used to suppress some warnings */ |
173 | |
174 | |
174 | typedef struct ev_watcher *W; |
175 | typedef struct ev_watcher *W; |
175 | typedef struct ev_watcher_list *WL; |
176 | typedef struct ev_watcher_list *WL; |
176 | typedef struct ev_watcher_time *WT; |
177 | typedef struct ev_watcher_time *WT; |
177 | |
178 | |
… | |
… | |
365 | pendings [ABSPRI (w_)][w_->pending - 1].events |= revents; |
366 | pendings [ABSPRI (w_)][w_->pending - 1].events |= revents; |
366 | return; |
367 | return; |
367 | } |
368 | } |
368 | |
369 | |
369 | w_->pending = ++pendingcnt [ABSPRI (w_)]; |
370 | w_->pending = ++pendingcnt [ABSPRI (w_)]; |
370 | array_needsize (ANPENDING, pendings [ABSPRI (w_)], pendingmax [ABSPRI (w_)], pendingcnt [ABSPRI (w_)], (void)); |
371 | array_needsize (ANPENDING, pendings [ABSPRI (w_)], pendingmax [ABSPRI (w_)], pendingcnt [ABSPRI (w_)], EMPTY2); |
371 | pendings [ABSPRI (w_)][w_->pending - 1].w = w_; |
372 | pendings [ABSPRI (w_)][w_->pending - 1].w = w_; |
372 | pendings [ABSPRI (w_)][w_->pending - 1].events = revents; |
373 | pendings [ABSPRI (w_)][w_->pending - 1].events = revents; |
373 | } |
374 | } |
374 | |
375 | |
375 | static void |
376 | static void |
… | |
… | |
445 | return; |
446 | return; |
446 | |
447 | |
447 | anfds [fd].reify = 1; |
448 | anfds [fd].reify = 1; |
448 | |
449 | |
449 | ++fdchangecnt; |
450 | ++fdchangecnt; |
450 | array_needsize (int, fdchanges, fdchangemax, fdchangecnt, (void)); |
451 | array_needsize (int, fdchanges, fdchangemax, fdchangecnt, EMPTY2); |
451 | fdchanges [fdchangecnt - 1] = fd; |
452 | fdchanges [fdchangecnt - 1] = fd; |
452 | } |
453 | } |
453 | |
454 | |
454 | static void |
455 | static void |
455 | fd_kill (EV_P_ int fd) |
456 | fd_kill (EV_P_ int fd) |
… | |
… | |
817 | |
818 | |
818 | for (i = NUMPRI; i--; ) |
819 | for (i = NUMPRI; i--; ) |
819 | array_free (pending, [i]); |
820 | array_free (pending, [i]); |
820 | |
821 | |
821 | /* have to use the microsoft-never-gets-it-right macro */ |
822 | /* have to use the microsoft-never-gets-it-right macro */ |
822 | array_free (fdchange, EMPTY); |
823 | array_free (fdchange, EMPTY0); |
823 | array_free (timer, EMPTY); |
824 | array_free (timer, EMPTY0); |
824 | #if EV_PERIODICS |
825 | #if EV_PERIODICS |
825 | array_free (periodic, EMPTY); |
826 | array_free (periodic, EMPTY0); |
826 | #endif |
827 | #endif |
827 | array_free (idle, EMPTY); |
828 | array_free (idle, EMPTY0); |
828 | array_free (prepare, EMPTY); |
829 | array_free (prepare, EMPTY0); |
829 | array_free (check, EMPTY); |
830 | array_free (check, EMPTY0); |
830 | |
831 | |
831 | method = 0; |
832 | method = 0; |
832 | } |
833 | } |
833 | |
834 | |
834 | static void |
835 | static void |
… | |
… | |
1341 | ((WT)w)->at += mn_now; |
1342 | ((WT)w)->at += mn_now; |
1342 | |
1343 | |
1343 | assert (("ev_timer_start called with negative timer repeat value", w->repeat >= 0.)); |
1344 | assert (("ev_timer_start called with negative timer repeat value", w->repeat >= 0.)); |
1344 | |
1345 | |
1345 | ev_start (EV_A_ (W)w, ++timercnt); |
1346 | ev_start (EV_A_ (W)w, ++timercnt); |
1346 | array_needsize (struct ev_timer *, timers, timermax, timercnt, (void)); |
1347 | array_needsize (struct ev_timer *, timers, timermax, timercnt, EMPTY2); |
1347 | timers [timercnt - 1] = w; |
1348 | timers [timercnt - 1] = w; |
1348 | upheap ((WT *)timers, timercnt - 1); |
1349 | upheap ((WT *)timers, timercnt - 1); |
1349 | |
1350 | |
1350 | assert (("internal timer heap corruption", timers [((W)w)->active - 1] == w)); |
1351 | assert (("internal timer heap corruption", timers [((W)w)->active - 1] == w)); |
1351 | } |
1352 | } |
… | |
… | |
1405 | /* this formula differs from the one in periodic_reify because we do not always round up */ |
1406 | /* this formula differs from the one in periodic_reify because we do not always round up */ |
1406 | ((WT)w)->at += ceil ((ev_rt_now - ((WT)w)->at) / w->interval) * w->interval; |
1407 | ((WT)w)->at += ceil ((ev_rt_now - ((WT)w)->at) / w->interval) * w->interval; |
1407 | } |
1408 | } |
1408 | |
1409 | |
1409 | ev_start (EV_A_ (W)w, ++periodiccnt); |
1410 | ev_start (EV_A_ (W)w, ++periodiccnt); |
1410 | array_needsize (struct ev_periodic *, periodics, periodicmax, periodiccnt, (void)); |
1411 | array_needsize (struct ev_periodic *, periodics, periodicmax, periodiccnt, EMPTY2); |
1411 | periodics [periodiccnt - 1] = w; |
1412 | periodics [periodiccnt - 1] = w; |
1412 | upheap ((WT *)periodics, periodiccnt - 1); |
1413 | upheap ((WT *)periodics, periodiccnt - 1); |
1413 | |
1414 | |
1414 | assert (("internal periodic heap corruption", periodics [((W)w)->active - 1] == w)); |
1415 | assert (("internal periodic heap corruption", periodics [((W)w)->active - 1] == w)); |
1415 | } |
1416 | } |
… | |
… | |
1446 | { |
1447 | { |
1447 | if (ev_is_active (w)) |
1448 | if (ev_is_active (w)) |
1448 | return; |
1449 | return; |
1449 | |
1450 | |
1450 | ev_start (EV_A_ (W)w, ++idlecnt); |
1451 | ev_start (EV_A_ (W)w, ++idlecnt); |
1451 | array_needsize (struct ev_idle *, idles, idlemax, idlecnt, (void)); |
1452 | array_needsize (struct ev_idle *, idles, idlemax, idlecnt, EMPTY2); |
1452 | idles [idlecnt - 1] = w; |
1453 | idles [idlecnt - 1] = w; |
1453 | } |
1454 | } |
1454 | |
1455 | |
1455 | void |
1456 | void |
1456 | ev_idle_stop (EV_P_ struct ev_idle *w) |
1457 | ev_idle_stop (EV_P_ struct ev_idle *w) |
… | |
… | |
1468 | { |
1469 | { |
1469 | if (ev_is_active (w)) |
1470 | if (ev_is_active (w)) |
1470 | return; |
1471 | return; |
1471 | |
1472 | |
1472 | ev_start (EV_A_ (W)w, ++preparecnt); |
1473 | ev_start (EV_A_ (W)w, ++preparecnt); |
1473 | array_needsize (struct ev_prepare *, prepares, preparemax, preparecnt, (void)); |
1474 | array_needsize (struct ev_prepare *, prepares, preparemax, preparecnt, EMPTY2); |
1474 | prepares [preparecnt - 1] = w; |
1475 | prepares [preparecnt - 1] = w; |
1475 | } |
1476 | } |
1476 | |
1477 | |
1477 | void |
1478 | void |
1478 | ev_prepare_stop (EV_P_ struct ev_prepare *w) |
1479 | ev_prepare_stop (EV_P_ struct ev_prepare *w) |
… | |
… | |
1490 | { |
1491 | { |
1491 | if (ev_is_active (w)) |
1492 | if (ev_is_active (w)) |
1492 | return; |
1493 | return; |
1493 | |
1494 | |
1494 | ev_start (EV_A_ (W)w, ++checkcnt); |
1495 | ev_start (EV_A_ (W)w, ++checkcnt); |
1495 | array_needsize (struct ev_check *, checks, checkmax, checkcnt, (void)); |
1496 | array_needsize (struct ev_check *, checks, checkmax, checkcnt, EMPTY2); |
1496 | checks [checkcnt - 1] = w; |
1497 | checks [checkcnt - 1] = w; |
1497 | } |
1498 | } |
1498 | |
1499 | |
1499 | void |
1500 | void |
1500 | ev_check_stop (EV_P_ struct ev_check *w) |
1501 | ev_check_stop (EV_P_ struct ev_check *w) |