OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2000-2004 Niels Provos <provos@citi.umich.edu> | 2 * Copyright (c) 2000-2004 Niels Provos <provos@citi.umich.edu> |
3 * All rights reserved. | 3 * All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
462 } | 462 } |
463 | 463 |
464 int | 464 int |
465 event_base_loop(struct event_base *base, int flags) | 465 event_base_loop(struct event_base *base, int flags) |
466 { | 466 { |
467 const struct eventop *evsel = base->evsel; | 467 const struct eventop *evsel = base->evsel; |
468 void *evbase = base->evbase; | 468 void *evbase = base->evbase; |
469 struct timeval tv; | 469 struct timeval tv; |
470 struct timeval *tv_p; | 470 struct timeval *tv_p; |
471 int res, done; | 471 int res, done; |
472 int processed_active = 0; | |
472 | 473 |
473 /* clear time cache */ | 474 /* clear time cache */ |
474 base->tv_cache.tv_sec = 0; | 475 base->tv_cache.tv_sec = 0; |
475 | 476 |
476 if (base->sig.ev_signal_added) | 477 if (base->sig.ev_signal_added) |
477 evsignal_base = base; | 478 evsignal_base = base; |
478 done = 0; | 479 done = 0; |
479 while (!done) { | 480 while (!done) { |
480 /* Terminate the loop if we have been asked to */ | 481 /* Terminate the loop if we have been asked to */ |
481 if (base->event_gotterm) { | 482 if (base->event_gotterm) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
516 res = evsel->dispatch(base, evbase, tv_p); | 517 res = evsel->dispatch(base, evbase, tv_p); |
517 | 518 |
518 if (res == -1) | 519 if (res == -1) |
519 return (-1); | 520 return (-1); |
520 gettime(base, &base->tv_cache); | 521 gettime(base, &base->tv_cache); |
521 | 522 |
522 timeout_process(base); | 523 timeout_process(base); |
523 | 524 |
524 if (base->event_count_active) { | 525 if (base->event_count_active) { |
525 event_process_active(base); | 526 event_process_active(base); |
527 processed_active = 1; | |
526 if (!base->event_count_active && (flags & EVLOOP_ONCE)) | 528 if (!base->event_count_active && (flags & EVLOOP_ONCE)) |
527 done = 1; | 529 done = 1; |
528 } else if (flags & EVLOOP_NONBLOCK) | 530 } else if (flags & EVLOOP_NONBLOCK) |
529 done = 1; | 531 done = 1; |
530 } | 532 } |
531 | 533 |
532 /* clear time cache */ | 534 /* clear time cache */ |
533 base->tv_cache.tv_sec = 0; | 535 base->tv_cache.tv_sec = 0; |
534 | 536 |
535 event_debug(("%s: asked to terminate loop.", __func__)); | 537 event_debug(("%s: asked to terminate loop.", __func__)); |
536 » return (0); | 538 » return (processed_active ? 2 : 0); |
wtc
2011/06/25 00:39:45
The return value 0 means success. 1 means no even
| |
537 } | 539 } |
538 | 540 |
539 /* Sets up an event for processing once */ | 541 /* Sets up an event for processing once */ |
540 | 542 |
541 struct event_once { | 543 struct event_once { |
542 struct event ev; | 544 struct event ev; |
543 | 545 |
544 void (*cb)(int, short, void *); | 546 void (*cb)(int, short, void *); |
545 void *arg; | 547 void *arg; |
546 }; | 548 }; |
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
993 /* | 995 /* |
994 * No thread-safe interface needed - the information should be the same | 996 * No thread-safe interface needed - the information should be the same |
995 * for all threads. | 997 * for all threads. |
996 */ | 998 */ |
997 | 999 |
998 const char * | 1000 const char * |
999 event_get_method(void) | 1001 event_get_method(void) |
1000 { | 1002 { |
1001 return (current_base->evsel->name); | 1003 return (current_base->evsel->name); |
1002 } | 1004 } |
OLD | NEW |