libmicrohttpd
[Top][All Lists]
Advanced

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

Re: [libmicrohttpd] Freeing data added to MHD_create_response_from_buffe


From: Nicolas Mora
Subject: Re: [libmicrohttpd] Freeing data added to MHD_create_response_from_buffer
Date: Mon, 17 Jan 2022 15:02:27 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0

Hello Gavin,

[resend to the list, sorry fot the noise Gavin]

Le 2022-01-17 à 14 h 40, Gavin Henry a écrit :> Hi all,
>
> I'm using json_dumps from jansson in my MHD_create_response_from_buffer
>
> Where is the best place to free this? I've tried at the end of my responses:
>
> MHD_destroy_response(response);
> free(json_reply)
> return ret;
>
> but this obviously breaks the data that goes to the client:
> If I understand your code, you use MHD_create_response_from_buffer with the MHD_RESPMEM_PERSISTENT mode, which, according to the documentation [1], means that 'reply' should be static/global, which isn't.

You can either:
- use MHD_RESPMEM_MUST_FREE and let MHD free 'reply' after use using free (if free suits your case) - use MHD_RESPMEM_MUST_COPY, then free 'reply' after with your own free function - or use MHD_create_response_from_buffer_with_free_callback and pass your free callback function pointer: MHD_create_response_from_buffer_with_free_callback(strlen(reply_data), (void *)reply_data, &free)

If you use libc free, I suggest the first case, but if you can use a different malloc/free function family, then you will need MHD_create_response_from_buffer_with_free_callback. The second option can be avoided in your case, since it will duplicate 'reply' content in the heap.

/Nicolas

[1] https://www.gnu.org/software/libmicrohttpd/manual/html_node/microhttpd_002dresponse-create.html



reply via email to

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