On Thu, Jun 25, 2009, Denis Bilenko wrote:
> Hi,
>
> I've run into an issue that surprised me a bit. I'm installing a few
> timeouts to be
> executed on a following loop iteration, i.e. after zero seconds. I
> would expect the timeouts
> happen in the order they were installed, however, this is not the
> case. Here's the code
I didn't think this was documented. As such, why would you expect them
to fire in-order? :)
> that shows the issue:
>
> #include <stdio.h>
> #include "event.h"
>
> struct event e[3];
> struct timeval zero = {0, 0};
>
> void print(int fd, short events, char * text)
> {
> printf(text);
> }
>
> void callback(int fd, short events, void * arg)
> {
> timeout_set(&e[0], print, "A\n");
> timeout_add(&e[0], &zero);
> timeout_set(&e[1], print, "B\n");
> timeout_add(&e[1], &zero);
> timeout_set(&e[2], print, "C\n");
> timeout_add(&e[2], &zero);
> }
>
> int main()
> {
> struct event e;
> event_init();
> timeout_set(&e, callback, NULL);
> timeout_add(&e, &zero);
> event_dispatch();
> }
>
> The output of this program is
> libevent$ ./a.out
> A
> C
> B
>
> not ABC as I would like.
>
> If I do the same outside of the callback, the order is maintained as expected.
>
> Adding more timers suggests that all of them except the first one (A)
> are executed in the reverse order.
> Again, doing the same outside of a callback makes them run in the
> expected order.
>
> Is this a bug or it's supposed to work this way? Maybe I'm doing
> something wrong and there is a way
> of getting the expected behavior without resorting to increasing
> timeval for each new call?
>
> Thanks,
> Denis.
> _______________________________________________
> Libevent-users mailing list
> [email protected]
> http://monkeymail.org/mailman/listinfo/libevent-users
--
- Xenion - http://www.xenion.com.au/ - VPS Hosting - Commercial Squid Support -
- $25/pm entry-level VPSes w/ capped bandwidth charges available in WA -
_______________________________________________
Libevent-users mailing list
[email protected]
http://monkeymail.org/mailman/listinfo/libevent-users