Age | Commit message (Collapse) | Author | Files | Lines |
|
(This used to be commit 5085c53fcfade614e83d21fc2c1a5bc43bb2a729)
|
|
- Make the epoll_event_context_init() call fail if epoll_create() fails.
This should cause this backend to be skipped on host with epoll() in
libc but not in the kernel.
- At the moment, there is no sensible way to handle failures to add an
epoll() event, and 'fallback to select' is misnamed (so we now
abort()).
Andrew Bartlett
(This used to be commit fb1e1eebdae740a2b66ee1ea9e1e35f21292ac14)
|
|
There are still a few tidyups of old FSF addresses to come (in both s3
and s4). More commits soon.
(This used to be commit fcf38a38ac691abd0fa51b89dc951a08e89fdafa)
|
|
(This used to be commit 76b981fcefb0dff24ac7d543da70fbb487ed7072)
|
|
the build farm
(This used to be commit 603d8b6f1702d10234b81ccde0649d8be63ae616)
|
|
the epoll context which would then appear in the children. To fix this
we need to check for pid changes in more places. Luckily on platforms
where we have epoll(), getpid() is very very cheap.
(This used to be commit 4f84e6d569f9c9d7dd902f4550735f3ce2d3b424)
|
|
(This used to be commit a69f28599845d3ea3868a574c6b0ba8db8486ef5)
|
|
(This used to be commit aeca07659aa612bee0c4dd6bdbb24c799e912909)
|
|
includes a new EVENT_FD_AUTOCLOSE flag that prevents race conditions
where code using fd events might close a fd before releasing the
struct fd_event. That causes headaches for epoll.
(This used to be commit f1ad216de13b154a1f8747a44b0970dcc47a784a)
|
|
- 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)
|
|
(This used to be commit b0c8c1cd21e3f91431504d70a4bc0d3c6dee6071)
|
|
If this happens:
- two sockets are readable, and select/epoll/aio returns both of
them
- read event on socket1 is called
- inside that read event an event_loop_once is called, this returns that
socket2 is readable
- read event on socket2 is called
- event_loop_once returns
- top level event handler then calls read event on socket2 (as it
still has that listed as readable)
- read handler for socket2 returns zero byte read, which is
interpreted as end of file
- socket is incorrectly closed
this happened with ctdb, but it could happen anywhere (just
rarely). The fix is trivial - ensure we break out of the event loop
when we have been called recursively.
(This used to be commit e042002bb5ee8974220e1ade56b64389571f75a6)
|
|
Jeremy asked for this to allow Samba3 to use the Samba4 events library
see torture/local/event.c for an example
(This used to be commit 7e105482ff9a3da6b4708ff99a64f1881614fc5f)
|
|
- fix epoll configure checks for the epoll and aio
events backends
- we should only activate the epoll backend if sys/epoll.h
and epoll_create() are found
- we should only activate the aio backend if sys/epoll.h, epoll_create(),
libaio.h and io_getevents() are found
hopefully fix the build on 'bnhtest' in the build farm...
metze
(This used to be commit d46a5efb03ea1df50567cad00e1589870cdb31fe)
|
|
- make it easier to plug in a new events backend
- add simpler 'select' and 'epoll' backends
This is part of the effort to add good AIO support. The events_aio.c
backend is done, but sometimes dies with a SEGV, which is why it isn't
enabled yet.
(This used to be commit 934f18283dbc7958944931a93a854526bcd54884)
|