libmicrohttpd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [libmicrohttpd] life of the strings / variables in callback


From: Christian Grothoff
Subject: Re: [libmicrohttpd] life of the strings / variables in callback
Date: Sun, 08 Feb 2015 02:03:49 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.3.0

On 02/07/2015 07:00 PM, chaman bagga wrote:
> 
> Hi, Can someone point out whether the variables are valid in the
> MHD_AccessHandlerCallback even after returning from callback when
> using Suspend / Resume? 

Arguments provided by MHD are generally only assured to be valid for the
duration of the callback, at least we deliberately did not document
anything stronger.

If for performance reasons you really cannot afford to copy, the
following is true today: With the exception of the "upload_data", the
values reachable from the MHD_AccessHandlerCallback won't change (so
particular, url, method, version and the "connection values" (URL
arguments)).

However, you do need to worry about them being destroyed when the
connection is finished. While you can listen for that even using a
"MHD_RequestCompletedCallback", a multi-threaded implementation will at
that point have plenty of fun (deadlocks, races) informing other threads
that might use those values of their demise.  That is likely to be a
bigger performance and correctness nightmare than just copying.


Summary: you MUST always copy upload_data, everything else SHOULD be
safe until MHD_RequestCompletedCallback(), but relying on it is not
encouraged, *especially* if you involve other threads.

> I'm running an http server with internal
> Select + epoll on linux, with a thread pool consisting of 4 threads.
> From MHD_AccessHandlerCallback,  I call suspend as my processing
> happens asynchronously in a different task. It requires an LDAP
> lookup. On getting a response on LDAP, I resume the connection and
> enqueue the response from the callback. This is as described in
> [libmicrohttpd] Trouble getting a response sent from a separate
> worker thread (with external select)
> 
> At present, I am copying all the strings (url, upload_data etc.) as
> its not clear if it is safe to pass the pointers to other threads, or
> if the pointers are invalid once the callback returns. Response is
> appreciated. Chaman
> 

I hope this clarifies the situation!


Happy hacking!

Christian

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]