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 >
signature.asc
Description: OpenPGP digital signature
