On Jul 5, 2012, at 4:20 PM, Nick Mathewson wrote:

> On Thu, Jul 5, 2012 at 3:34 PM, Scott Dorr <j.scott.d...@gmail.com> wrote:
>> When an event_del() is called on an evq, what happens to triggerings that
>> were already 'in-flight' but haven't had their callbacks called yet.
> 
> event_del() will make an active event inactive; if its callback was
> scheduled but has not been run, it won't be run.

This is the answer I was looking for.  Thanks. :)

>> For example:
>> 
>> read event R is active on fd 42, uses 'callback_func()' as its callback
>> new packet P1 comes in on fd 42
>> new packet P2 comes in on fd 42
>> libevent calls callback_func() for P1
>> callback_func() calls event_del() on event R
> 
> In this case, callback_func would not even be scheduled until the next
> time around the event loop.
> 
>> What happens with P2?  Is callback_func() still going to be called for it?
> 
> Nope, not unless you call event_add() on R again.
> 
> The easiest pattern here is to try to drain your socket completely on
> the callback.  Libevent doesn't promise you one callback per packet;
> it promises you what you will get a callback so long as the socket is
> active and readable.

Yup, makes sense.  I just needed to get my head around the specifics of what 
happens with that event_del().

Thanks for the response!


- scott***********************************************************************
To unsubscribe, send an e-mail to majord...@freehaven.net with
unsubscribe libevent-users    in the body.

Reply via email to