Miguel,

I can only assume that your assertion that you are not modifying the
buffer after creating the response object is not correct.

My 2 cents

Christian

On 01/24/2017 05:22 PM, Miguel Sancho wrote:
> Hi Silvio, thanks for answering,
> 
>> Could you show what error and how the buffer was assigned?
> 
> The error is that the downloaded binary file from the MHD server with the
> MHD_RESPMEM_PERSISTENT option is corrupt:
> 
>    - Same size as the original
>    - The initial bytes are ok
>    - but from a certain point file contents are set to '0'. The
>    free(buffer) seems to impact the content downloaded in the http response, I
>    do not how because free() is after the MHD_destroy_response()
>    - Buffer is correctly downloaded when using the MHD_RESPMEM_MUST_COPY
>    option but I wanted to minimize the memory impacts
> 
> The buffer is allocated by the MHD server with malloc, simplifying:
>              unsigned char* buffer = (unsigned char*)malloc(dataSize);
>              memcpy(buffer, data, dataSize);
> 
> Another thing I observe is that if* I remove the free(buffer)*, the file is
> correctly downloaded. However this solution is not valid because in this
> case I have a memory leak:
> *            response = MHD_create_response_from_*
> 
> 
> 
> *buffer(
> size,(void*)buffer,MHD_RESPMEM_PERSISTENT);            ret =
> MHD_queue_response (connection, 200, response);
> MHD_destroy_response (response);            //free(buffer);   // Memory
> Leak!*
> 
> Thanks
> 
> Miguel
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to