On Tue, Mar 27, 2012 at 5:35 PM, William Lima <wl...@primate.com.br> wrote:
> On Fri, Mar 23, 2012 at 12:54 AM, Nick Mathewson <ni...@freehaven.net>wrote: > >> On Thu, Mar 22, 2012 at 9:18 PM, Mark Ellzey <mtho...@strcpy.net> wrote: >> > 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. >> >> Hmmm. That's only true with some bufferevent types. With regular >> socket-based bufferevents on a non-IOCP backend, it shouldn't be the >> case, except with certain event types. >> >> William, do you have a stack trace for when this undesired callback is >> happening? There might be a simpler workaround here depending on what >> the issue is. > > > Hey Nick, > > I have Valgrind logs. Logs and source-code attached. > > Thanks in advance, > anyone had any luck on this? -- w