mirror of
https://github.com/libevent/libevent.git
synced 2025-01-31 09:12:55 +08:00
Expose event_base_foreach_event() as a public API.
This commit is contained in:
parent
e8faa2c74c
commit
84fd6d7506
@ -401,7 +401,7 @@ void event_base_assert_ok_nolock_(struct event_base *base);
|
||||
|
||||
|
||||
/* Callback type for event_base_foreach_event. */
|
||||
typedef int (*event_base_foreach_event_cb)(struct event_base *base, struct event *, void *);
|
||||
//typedef int (*event_base_foreach_event_cb)(struct event_base *base, struct event *, void *);
|
||||
|
||||
/* Helper function: Call 'fn' exactly once every inserted or active event in
|
||||
* the event_base 'base'.
|
||||
|
21
event.c
21
event.c
@ -3194,7 +3194,7 @@ evthread_make_base_notifiable_nolock_(struct event_base *base)
|
||||
|
||||
int
|
||||
event_base_foreach_event_(struct event_base *base,
|
||||
int (*fn)(struct event_base *, struct event *, void *), void *arg)
|
||||
event_base_foreach_event_cb fn, void *arg)
|
||||
{
|
||||
int r, i;
|
||||
unsigned u;
|
||||
@ -3255,7 +3255,7 @@ event_base_foreach_event_(struct event_base *base,
|
||||
/* Helper for event_base_dump_events: called on each event in the event base;
|
||||
* dumps only the inserted events. */
|
||||
static int
|
||||
dump_inserted_event_fn(struct event_base *base, struct event *e, void *arg)
|
||||
dump_inserted_event_fn(const struct event_base *base, const struct event *e, void *arg)
|
||||
{
|
||||
FILE *output = arg;
|
||||
const char *gloss = (e->ev_events & EV_SIGNAL) ?
|
||||
@ -3287,7 +3287,7 @@ dump_inserted_event_fn(struct event_base *base, struct event *e, void *arg)
|
||||
/* Helper for event_base_dump_events: called on each event in the event base;
|
||||
* dumps only the active events. */
|
||||
static int
|
||||
dump_active_event_fn(struct event_base *base, struct event *e, void *arg)
|
||||
dump_active_event_fn(const struct event_base *base, const struct event *e, void *arg)
|
||||
{
|
||||
FILE *output = arg;
|
||||
const char *gloss = (e->ev_events & EV_SIGNAL) ?
|
||||
@ -3308,14 +3308,29 @@ dump_active_event_fn(struct event_base *base, struct event *e, void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
event_base_foreach_event(struct event_base *base,
|
||||
event_base_foreach_event_cb fn, void *arg)
|
||||
{
|
||||
if ((!fn) || (!base)) {
|
||||
return;
|
||||
}
|
||||
EVBASE_ACQUIRE_LOCK(base, th_base_lock);
|
||||
event_base_foreach_event_(base, fn, arg);
|
||||
EVBASE_RELEASE_LOCK(base, th_base_lock);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
event_base_dump_events(struct event_base *base, FILE *output)
|
||||
{
|
||||
EVBASE_ACQUIRE_LOCK(base, th_base_lock);
|
||||
fprintf(output, "Inserted events:\n");
|
||||
event_base_foreach_event_(base, dump_inserted_event_fn, output);
|
||||
|
||||
fprintf(output, "Active events:\n");
|
||||
event_base_foreach_event_(base, dump_active_event_fn, output);
|
||||
EVBASE_RELEASE_LOCK(base, th_base_lock);
|
||||
}
|
||||
|
||||
void
|
||||
|
4
evmap.c
4
evmap.c
@ -963,7 +963,7 @@ evmap_check_integrity_(struct event_base *base)
|
||||
/* Helper type for evmap_foreach_event_: Bundles a function to call on every
|
||||
* event, and the user-provided void* to use as its third argument. */
|
||||
struct evmap_foreach_event_helper {
|
||||
int (*fn)(struct event_base *, struct event *, void *);
|
||||
int (*fn)(const struct event_base *, const struct event *, void *);
|
||||
void *arg;
|
||||
};
|
||||
|
||||
@ -1001,7 +1001,7 @@ evmap_signal_foreach_event_fn(struct event_base *base, int signum,
|
||||
|
||||
int
|
||||
evmap_foreach_event_(struct event_base *base,
|
||||
int (*fn)(struct event_base *, struct event *, void *), void *arg)
|
||||
int (*fn)(const struct event_base *, const struct event *, void *), void *arg)
|
||||
{
|
||||
struct evmap_foreach_event_helper h;
|
||||
int r;
|
||||
|
@ -1325,6 +1325,27 @@ void event_set_mem_functions(
|
||||
*/
|
||||
void event_base_dump_events(struct event_base *, FILE *);
|
||||
|
||||
|
||||
/**
|
||||
* callback for iterating events in an event base via event_base_foreach_event
|
||||
*/
|
||||
typedef int (*event_base_foreach_event_cb)(const struct event_base *, const struct event *, void *);
|
||||
|
||||
/**
|
||||
Iterate all current events in a given event loop. The method is an
|
||||
alternative to event_base_dump_events, but provides a native interface
|
||||
towards the events.
|
||||
|
||||
Modification of events during iteration is an invalid operation
|
||||
and may lead to unexpected behaviour
|
||||
|
||||
@param base An event_base on which to scan the events.
|
||||
@param fn A callback function to receive the events.
|
||||
*/
|
||||
void event_base_foreach_event(struct event_base *base, event_base_foreach_event_cb fn, void *arg);
|
||||
|
||||
|
||||
|
||||
/** Sets 'tv' to the current time (as returned by gettimeofday()),
|
||||
looking at the cached value in 'base' if possible, and calling
|
||||
gettimeofday() or clock_gettime() as appropriate if there is no
|
||||
|
Loading…
x
Reference in New Issue
Block a user