… | |
… | |
116 | |
116 | |
117 | if (ev->abstime) |
117 | if (ev->abstime) |
118 | { |
118 | { |
119 | double now = e_now (); |
119 | double now = e_now (); |
120 | |
120 | |
121 | if (now > to && ev->interval) |
121 | if (ev->interval) |
122 | ev->timeout = (to += ceil ((now - to) / ev->interval) * ev->interval); |
122 | ev->timeout = (to += ceil ((now - to) / ev->interval) * ev->interval); |
123 | |
123 | |
124 | to -= now; |
124 | to -= now; |
125 | } |
125 | } |
126 | else if (to < 0.) |
126 | else if (to < 0.) |
… | |
… | |
169 | dSP; |
169 | dSP; |
170 | |
170 | |
171 | ENTER; |
171 | ENTER; |
172 | SAVETMPS; |
172 | SAVETMPS; |
173 | |
173 | |
174 | if (!(ev->ev.ev_events & EV_PERSIST)) |
174 | if (!(ev->ev.ev_events & EV_PERSIST) || (events & EV_TIMEOUT)) |
175 | ev->active = 0; |
175 | ev->active = 0; |
176 | |
176 | |
177 | PUSHMARK (SP); |
177 | PUSHMARK (SP); |
178 | EXTEND (SP, 2); |
178 | EXTEND (SP, 2); |
179 | PUSHs (sv_2mortal (e_self (ev))); |
179 | PUSHs (sv_2mortal (e_self (ev))); |