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.
>>
>
>

Reply via email to