[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [Libevent-users] Threading question in libevent



On Sat, Nov 20, 2010 at 6:21 AM, Sherif Fanous <sherif.fanous@xxxxxxxxx> wrote:
> Hello
> I have my event callback receiving data from the network using recv. If recv
> returns 0 (FIN received), I call a function to disconnect and cleanup.
> Part of my cleanup is as follows
> if (server->receive_event) {
>     event_free(server->receive_event);
>     server->receive_event = NULL;
> }
>
> I have run into this strange deadlock situation
> If the cleanup function is called from the event callback then I experience
> no deadlocks.
> However if the cleanup function is called from another thread, and the event
> callback is executing, then a deadlock occurs. In my case the event callback
> also never terminates as it is waiting on a lock acquired by the cleanup
> function.
> Is it normal behavior that event_free won't be able to free the event, if
> the event is active in another thread?

Right; current behavior is that while an event callback is executing,
attempts to add, delete, or activate the event from another thread may
block on a condition variable.  Doing an event_free() does an implicit
event_del().

-- 
Nick
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users    in the body.