I see that the code for evthread_use_windows_threads(void) ends up calling evthread_set_id_callback, evthread_set_condition_callbacks, and evthread_set_lock_callbacks, so I should not be using evthread_use_windows_threads along with those three latter calls to specify my own threading library.
On Wed, Jun 27, 2012 at 1:11 PM, Julian Bui <julian...@gmail.com> wrote: > Thanks for your reply, Mark. > > First of all, I'd like to clarify, if maybe I did not make it clear, but > I'm using a custom threading library built on top of Qt. So I'm not quite > sure if I use evthread_use_windows_threads() *IN CONJUNCTION WITH* > evthread_set_id_callback, evthread_set_condition_callbacks, and > evthread_set_lock_callbacks. I figured if I'm going to be using a custom > thread library that I'd use neither evthread_use_windows_threads nor > evthread_use_posix_threads. > > Secondly, I took your suggestion and called evthread_use_windows_threads() > as the first thing I do and it still crashed. I am attaching the code > below. > > Perhaps as a sanity check, it would be nice if someone would at least say > "yes/no evhttp was/wasn't meant to be used in the way you're using it" > > Thanks, > -Julian > > evthread_use_windows_threads(); > > ... > > evthread_set_id_callback(&EvThread::id_fn); > > evthread_condition_callbacks cond_cbs; > cond_cbs.condition_api_version = 1.0; > cond_cbs.alloc_condition = &EvWaitCond::alloc_condition; > cond_cbs.free_condition = &EvWaitCond::free_condition; > cond_cbs.signal_condition = &EvWaitCond::signal_condition; > cond_cbs.wait_condition = &EvWaitCond::wait_condition; > > evthread_set_condition_callbacks(&cond_cbs); > > evthread_lock_callbacks lock_cbs; > lock_cbs.lock_api_version = 1.0; > lock_cbs.supported_locktypes = EVTHREAD_LOCKTYPE_RECURSIVE; > lock_cbs.alloc = &EvLock::alloc; > lock_cbs.free = &EvLock::free; > lock_cbs.lock = &EvLock::lock; > lock_cbs.unlock = &EvLock::unlock; > > evthread_set_lock_callbacks(&lock_cbs); > > ==================== > > > On Wed, Jun 27, 2012 at 12:42 PM, Mark Ellzey <mtho...@strcpy.net> wrote: > >> On Wed, Jun 27, 2012 at 02:37:22PM -0500, Mark Ellzey wrote: >> > On Wed, Jun 27, 2012 at 11:02:04AM -0700, Julian Bui wrote: >> > > Hi libevent, >> > > >> > > Sorry for the recent surge of emails. I am trying to determine the >> cause >> > > of a problem in my application while using evhttp. I wrote a >> toy/dummy >> > > server (whose code I included) that exhibits the same problem that my >> real >> > > application is having. >> > > >> > > PROBLEM OVERVIEW: >> > > >> > > My application is using ev_http and I set its gencb (handles any >> request >> > > that comes in) to a function that just validates that there's a path >> or >> > > query. If a path or query exists, the evhttp_request*, path, and >> query are >> > > handed off to one thread which processes the request one at a time. >> This >> > > thread is calling evhttp_send_reply or evhttp_send_error when done >> with the >> > > request. >> > > >> > > The problem is that when I hit my server through the browser and hit >> > > refresh to constantly send it requests, it crashes. In the debugger, >> I see >> > > it crashes on the evhttp_send_reply line and the error reads: >> "exception at >> > > 0x____ in ____.exe, 0xC0000005: Access violation reading location >> > > 0xdddddee5" none of the parameters going into this method are NULL. >> > > >> > >> > I don't see either evthread_use_pthreads() or >> > evthread_use_windows_threads() being used before setting up any events. >> > Try putting that at the top of your main function before anything else >> > and compile with -levent_threads >> >> Let me reiterate, you first have to call one of the above functions >> *before* setting evthread_set_lock_callbacks, evthread_set_id_callback, >> and evthread_set_condition_callbacks. >> *********************************************************************** >> To unsubscribe, send an e-mail to majord...@freehaven.net with >> unsubscribe libevent-users in the body. >> > >