diff options
author | Stefan Metzmacher <metze@samba.org> | 2007-05-04 09:22:52 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:51:58 -0500 |
commit | 6c6c5927a1e16e347a0e353904241694b21b57f9 (patch) | |
tree | 58b8a0d18f21ecd8f1565738cb829a8bfa555a42 /source4/lib/events/events_internal.h | |
parent | e4161f9deee8198e9128e88458e3c5603e86cd3e (diff) | |
download | samba-6c6c5927a1e16e347a0e353904241694b21b57f9.tar.gz samba-6c6c5927a1e16e347a0e353904241694b21b57f9.tar.xz samba-6c6c5927a1e16e347a0e353904241694b21b57f9.zip |
r22661: optimize the handling of directly triggered timed events:
- if someone adds a timed_event with a zero timeval
we now avoid serval gettimeofday() calls and the
event handler doesn't get the current time when it's
called, instead we also pass a zero timeval
- this also makes sure multiple timed events with a zero timeval
are processed in the order there're added.
the little benchmark shows that processing 2000000 directly timed events
is now much faster, while avoiding syscalls at all!
> time ./evtest (with the old code)
real 0m6.388s
user 0m1.740s
sys 0m4.632s
> time ./evtest (with the new code)
real 0m1.498s
user 0m1.496s
sys 0m0.004s
metze@SERNOX:~/devel/samba/4.0/samba4-ci/source> cat evtest.c
#include <stdio.h>
#include <stdint.h>
#include <sys/time.h>
#include <talloc.h>
#include <events.h>
static void dummy_fde_handler(struct event_context *ev_ctx, struct fd_event *fde,
uint16_t flags, void *private_data)
{
}
static void timeout_handler(struct event_context *ev, struct timed_event *te,
struct timeval tval, void *private_data)
{
uint32_t *countp = (uint32_t *)private_data;
(*countp)++;
if (*countp > 2000000) exit(0);
event_add_timed(ev, ev, tval, timeout_handler, countp);
}
int main(void)
{
struct event_context *ev;
struct timeval tval = { 0, 0 };
uint32_t count = 0;
ev = event_context_init(NULL);
event_add_fd(ev, ev, 0, 0, dummy_fde_handler, NULL);
event_add_timed(ev, ev, tval, timeout_handler, &count);
return event_loop_wait(ev);
}
(This used to be commit 4db64b4ce2320b88d648078cbf86385f6fb44f1f)
Diffstat (limited to 'source4/lib/events/events_internal.h')
-rw-r--r-- | source4/lib/events/events_internal.h | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/source4/lib/events/events_internal.h b/source4/lib/events/events_internal.h index 04b92df5505..fb15665c0a4 100644 --- a/source4/lib/events/events_internal.h +++ b/source4/lib/events/events_internal.h @@ -117,8 +117,7 @@ bool event_register_backend(const char *name, const struct event_ops *ops); struct timed_event *common_event_add_timed(struct event_context *, TALLOC_CTX *, struct timeval, event_timed_handler_t, void *); -void common_event_loop_timer(struct event_context *); -struct timeval common_event_loop_delay(struct event_context *); +struct timeval common_event_loop_timer_delay(struct event_context *); struct signal_event *common_event_add_signal(struct event_context *ev, TALLOC_CTX *mem_ctx, |