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

Re: [Libevent-users] How to avoid calling bufferevent_write on a freed bev efficiently?



On Wed, Feb 8, 2012 at 5:37 AM, Wenliang Zhang <wlamos@xxxxxxxxx> wrote:
> Hi, all,

Personally, my first approach would be to do it with something closer
to a reference count: in the data associated with each bufferevent,
remember the number of messages it has outstanding, and don't actually
free the bufferevent until it has received a close _and_ it has no
messages waiting.

Alternatively, you could use a weak-reference style system where
instead of having a pointer to the bufferevent, each Message would get
a pointer to a a "weak reference" object that either had a pointer to
the bufferevent, or a NULL pointer to indicate that the bufferevent
had gone away.  You'd free these objects once the bufferevent had no
more outstanding messages.

Or you could keep a linked list of messages for each bufferevent, and,
when about to free the bufferevent, first cancel each message or mark
it as having to bufferevent to send to.

There are probably other ways too.

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