ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev.c
(Generate patch)

Comparing libev/ev.c (file contents):
Revision 1.2 by root, Tue Oct 30 21:42:12 2007 UTC vs.
Revision 1.3 by root, Tue Oct 30 21:45:00 2007 UTC

256{ 256{
257 while (timercnt && timers [0]->at <= ev_now) 257 while (timercnt && timers [0]->at <= ev_now)
258 { 258 {
259 struct ev_timer *w = timers [0]; 259 struct ev_timer *w = timers [0];
260 260
261 fprintf (stderr, "0 %f, %d c%d\n", w->at, w->active, timercnt);//D
262 /* first reschedule timer */ 261 /* first reschedule timer */
263 if (w->repeat) 262 if (w->repeat)
264 { 263 {
265 fprintf (stderr, "a %f now %f repeat %f, %f\n", w->at, ev_now, w->repeat, w->repeat *1e30);//D
266 if (w->is_abs) 264 if (w->is_abs)
267 w->at += ceil ((ev_now - w->at) / w->repeat + 1.) * w->repeat; 265 w->at += ceil ((ev_now - w->at) / w->repeat + 1.) * w->repeat;
268 else 266 else
269 w->at = ev_now + w->repeat; 267 w->at = ev_now + w->repeat;
270 268
271 fprintf (stderr, "b %f\n", w->at);//D
272
273 downheap (0); 269 downheap (0);
274 } 270 }
275 else 271 else
276 {
277 fprintf (stderr, "c %f, %d c%d\n", w->at, w->active, timercnt);//D
278 evtimer_stop (w); /* nonrepeating: stop timer */ 272 evtimer_stop (w); /* nonrepeating: stop timer */
279 }
280 273
281 event ((struct ev_watcher *)w, EV_TIMEOUT); 274 event ((struct ev_watcher *)w, EV_TIMEOUT);
282 } 275 }
283} 276}
284 277
306 block = timers [0]->at - ev_now + method_fudge; 299 block = timers [0]->at - ev_now + method_fudge;
307 if (block < 0.) block = 0.; 300 if (block < 0.) block = 0.;
308 else if (block > MAX_BLOCKTIME) block = MAX_BLOCKTIME; 301 else if (block > MAX_BLOCKTIME) block = MAX_BLOCKTIME;
309 } 302 }
310 303
311 fprintf (stderr, "block %f\n", block);//D
312 method_poll (block); 304 method_poll (block);
313 305
314 /* put pending timers into pendign queue and reschedule them */ 306 /* put pending timers into pendign queue and reschedule them */
315 timer_reify (); 307 timer_reify ();
316 308
394evtimer_start (struct ev_timer *w) 386evtimer_start (struct ev_timer *w)
395{ 387{
396 if (ev_is_active (w)) 388 if (ev_is_active (w))
397 return; 389 return;
398 390
399 fprintf (stderr, "t1 %f a %d\n", w->at, w->is_abs);//D
400 if (w->is_abs) 391 if (w->is_abs)
401 { 392 {
402 /* this formula differs from the one in timer_reify becuse we do not round up */ 393 /* this formula differs from the one in timer_reify becuse we do not round up */
403 if (w->repeat) 394 if (w->repeat)
404 w->at += ceil ((ev_now - w->at) / w->repeat) * w->repeat; 395 w->at += ceil ((ev_now - w->at) / w->repeat) * w->repeat;
405 } 396 }
406 else 397 else
407 w->at += ev_now; 398 w->at += ev_now;
408 fprintf (stderr, "t2 %f a %d\n", w->at, w->is_abs);//D
409 399
410 ev_start ((struct ev_watcher *)w, ++timercnt); 400 ev_start ((struct ev_watcher *)w, ++timercnt);
411 array_needsize (timers, timermax, timercnt, ); 401 array_needsize (timers, timermax, timercnt, );
412 timers [timercnt - 1] = w; 402 timers [timercnt - 1] = w;
413 upheap (timercnt - 1); 403 upheap (timercnt - 1);
414} 404}
415 405
416void 406void
417evtimer_stop (struct ev_timer *w) 407evtimer_stop (struct ev_timer *w)
418{ 408{
419 fprintf (stderr, "-topping %d, %d\n", w->active, timercnt);//D
420 if (!ev_is_active (w)) 409 if (!ev_is_active (w))
421 return; 410 return;
422 411
423 fprintf (stderr, "stopping %d, %d\n", w->active, timercnt);//D
424 if (w->active < timercnt) 412 if (w->active < timercnt--)
425 { 413 {
426 timers [w->active - 1] = timers [--timercnt]; 414 timers [w->active - 1] = timers [timercnt];
427 downheap (w->active - 1); 415 downheap (w->active - 1);
428 } 416 }
429 417
430 ev_stop ((struct ev_watcher *)w); 418 ev_stop ((struct ev_watcher *)w);
431} 419}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines