[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [Libevent-users] segfault issue
On Thu, Mar 22, 2012 at 07:11:01PM -0300, William Lima wrote:
> Hi!
>
> I'm using bufferevent in my proxy project and I have a bug. The entire
> program is single-thread, but apparently the error callback can be called
> while something is still running (ie. a parser) into server/client read
> callbacks, causing a segmentation fault, since the error callback destroy
> the Connection class.
> Is it the expected behavior? Should I add a *state* to check when a
> callback is running and not delete on error callback directly?
>
> The related code is listed below (server_error_cb, server_read_cb functions
> are similar, but not listed):
>
Just glancing over your code, the while loop seems like it may be the
cause. When you call bufferevent_write_buffer(), if it is not setup to
be deferred, will immediately attempt to write to the underlying socket.
If the write call fails for some reason, your error callback is
executed.
while (1) {
bufferevent_write_buffer() {
<invoke callbacks on the write event> {
bufferevent_sock:writecb {
send(sock, ....) <= 0 {
bufferevent_run_eventcb(..., BEV_EVENT_[ERROR|EOF]) {
Connection::client_error_cb() {
}
}
}
}
}
I would suggest setting BEV_OPT_DEFER_CALLBACKS when creating your
bufferevents if you're using it like this.
Hope it helps!
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users in the body.