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

Reply via email to