[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [Libevent-users] using event_base_loop withy timer events
On Sat, Oct 24, 2015 at 01:43:37PM +0300, Roman Gershman wrote:
> The short example is provided here :
> https://gist.github.com/romange/6d1d5c51e7dd8054fbf8
> The version I am using is version 2.0.21-stable
>
> When line 16 is commented out (#define EVENT_FLAG 0) the bug is reproduced.
>
>
> for the 'good' version you should get output:
>
> version 2.0.21-stable
> 18
>
> and in the problematic version the counter is 1.
>
>
> On Thu, Oct 22, 2015 at 7:34 PM, Azat Khuzhin <a3at.mail@xxxxxxxxx> wrote:
>
> > On Thu, Oct 22, 2015 at 07:02:53PM +0300, Roman Gershman wrote:
> > > Hi,
> > > my ebase thread does the following loop
> > >
> > > while ((res = event_base_loop(ebase_, EVLOOP_ONCE)) == 1) {
> > > }
> > >
> > >
> > > and the other (main) adds timer event that runs every millisecond. It
> > adds
> > > the event *after* the ebase thread calls event_base_loop.
> > >
> > > event* ev = event_new(base(), -1, EV_PERSIST | EV_TIMEOUT, &PeriodicCb,
> > > data);
> > > CHECK_EQ(0, event_add(ev, &tv));
> > >
> > >
> > > I see that this event does not run. If I change flags from EVLOOP_ONCE
> > to 0
> > > it does run well.
> > > How should I make event base to realize that the new event is added?
Hi Roman,
Right now you have:
while (event_base_loop(base, EVLOOP_ONCE)) {
}
But this will work only when you don't have any events, since when you
will have event event_base_loop() will return *zero* not *one*, and once
persistent event added you will have events and it will return *zero*,
IOW if you simply change you loop like this:
while (event_base_loop(base, EVLOOP_ONCE) >= 0) {
}
It must works like you want (if I understand correctly).
Also consider to enable pthread to avoid races (this is not the case for
this sample, but I don't know what you have in real):
evthread_use_pthreads()
Cheers,
Azat.
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users in the body.