|
|
|
@ -1898,6 +1898,19 @@ periodics_reschedule (EV_P)
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static void noinline
|
|
|
|
|
timers_reschedule (EV_P_ ev_tstamp adjust)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < timercnt; ++i)
|
|
|
|
|
{
|
|
|
|
|
ANHE *he = timers + i + HEAP0;
|
|
|
|
|
ANHE_w (*he)->at += adjust;
|
|
|
|
|
ANHE_at_cache (*he);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inline_speed void
|
|
|
|
|
time_update (EV_P_ ev_tstamp max_block)
|
|
|
|
|
{
|
|
|
|
@ -1941,11 +1954,11 @@ time_update (EV_P_ ev_tstamp max_block)
|
|
|
|
|
now_floor = mn_now;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* no timer adjustment, as the monotonic clock doesn't jump */
|
|
|
|
|
/* timers_reschedule (EV_A_ rtmn_diff - odiff) */
|
|
|
|
|
# if EV_PERIODIC_ENABLE
|
|
|
|
|
periodics_reschedule (EV_A);
|
|
|
|
|
# endif
|
|
|
|
|
/* no timer adjustment, as the monotonic clock doesn't jump */
|
|
|
|
|
/* timers_reschedule (EV_A_ rtmn_diff - odiff) */
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
#endif
|
|
|
|
@ -1954,40 +1967,17 @@ time_update (EV_P_ ev_tstamp max_block)
|
|
|
|
|
|
|
|
|
|
if (expect_false (mn_now > ev_rt_now || ev_rt_now > mn_now + max_block + MIN_TIMEJUMP))
|
|
|
|
|
{
|
|
|
|
|
/* adjust timers. this is easy, as the offset is the same for all of them */
|
|
|
|
|
timers_reschedule (EV_A_ ev_rt_now - mn_now);
|
|
|
|
|
#if EV_PERIODIC_ENABLE
|
|
|
|
|
periodics_reschedule (EV_A);
|
|
|
|
|
#endif
|
|
|
|
|
/* adjust timers. this is easy, as the offset is the same for all of them */
|
|
|
|
|
for (i = 0; i < timercnt; ++i)
|
|
|
|
|
{
|
|
|
|
|
ANHE *he = timers + i + HEAP0;
|
|
|
|
|
ANHE_w (*he)->at += ev_rt_now - mn_now;
|
|
|
|
|
ANHE_at_cache (*he);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mn_now = ev_rt_now;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
ev_ref (EV_P)
|
|
|
|
|
{
|
|
|
|
|
++activecnt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
ev_unref (EV_P)
|
|
|
|
|
{
|
|
|
|
|
--activecnt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
ev_now_update (EV_P)
|
|
|
|
|
{
|
|
|
|
|
time_update (EV_A_ 1e100);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int loop_done;
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
@ -2115,6 +2105,41 @@ ev_unloop (EV_P_ int how)
|
|
|
|
|
loop_done = how;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
ev_ref (EV_P)
|
|
|
|
|
{
|
|
|
|
|
++activecnt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
ev_unref (EV_P)
|
|
|
|
|
{
|
|
|
|
|
--activecnt;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
ev_now_update (EV_P)
|
|
|
|
|
{
|
|
|
|
|
time_update (EV_A_ 1e100);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
ev_suspend (EV_P)
|
|
|
|
|
{
|
|
|
|
|
ev_now_update (EV_A);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
ev_resume (EV_P)
|
|
|
|
|
{
|
|
|
|
|
ev_tstamp mn_prev = mn_now;
|
|
|
|
|
|
|
|
|
|
ev_now_update (EV_A);
|
|
|
|
|
printf ("update %f\n", mn_now - mn_prev);//D
|
|
|
|
|
timers_reschedule (EV_A_ mn_now - mn_prev);
|
|
|
|
|
periodics_reschedule (EV_A);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
inline_size void
|
|
|
|
|