cURL / Mailing Lists / curl-library / Single Mail


Re: double free or corruption error on post with libcurl

From: Jeremy Brown <>
Date: Mon, 09 May 2005 09:15:58 -0600

Openssl was the culprit and I it took a bit to find a solution that fixes the openssl problem but here is one I found posted on the web. I included it in case someone else needs it. It solved my problem with the double free or corruption errors. Works like a charm.
#define MUTEX_TYPE pthread_mutex_t
#define MUTEX_SETUP(x) pthread_mutex_init(&(x), NULL)
#define MUTEX_CLEANUP(x) pthread_mutex_destroy(&(x))
#define MUTEX_LOCK(x) pthread_mutex_lock(&(x))
#define MUTEX_UNLOCK(x) pthread_mutex_unlock(&(x))
#define THREAD_ID pthread_self( )
void handle_error(const char *file, int lineno, const char *msg){
     fprintf(stderr, ** %s:%i %s\n, file, lineno, msg);
/* This array will store all of the mutexes available to OpenSSL. */
static MUTEX_TYPE *mutex_buf= NULL;
static void locking_function(int mode, int n, const char * file, int line){
    if (mode & CRYPTO_LOCK)
static unsigned long id_function(void){
    return ((unsigned long)THREAD_ID);
int thread_setup(void){
    int i;
    mutex_buf = (MUTEX_TYPE *)malloc(CRYPTO_num_locks( ) * sizeof(MUTEX_TYPE));
    if (!mutex_buf)
        return 0;
    for (i = 0; i < CRYPTO_num_locks( ); i++)
    return 1;
int thread_cleanup(void)
    int i;
    if (!mutex_buf)
        return 0;
    for (i = 0; i < CRYPTO_num_locks( ); i++)
    mutex_buf = NULL;
    return 1;

>>> 05/04/05 3:08 pm >>>
I spoke too soon. It ran a couple times then returned back to having error.
I will give the openssl information a try and let you know how it works out. BTW Great list to have such quick responses.

>>> 05/04/05 12:07 pm >>>
On Wed, 4 May 2005, Jeremy Brown wrote:

>I am receiving an error in my c program when I reach 10 threads

You need to set two OpenSSL callback functions to be able to use
SSL-related connections multi-threaded:

I'm personally not too happy to force applications to have to deal with
OpenSSL directly since libcurl does a good job at hiding that dependency in
all other aspects, and with the upcoming GnuTLS support it'll be even

 Commercial curl and libcurl Technical Support:
Received on 2005-05-09