Question

In my multithreaded app I have tried to use curl (with openssl) for performing HTTPS requests.

I have read and make all according to this info:

And application crashes with SEGFAULT 11 and next call stack:

#0 0x00007f62446014d0 in X509_STORE_add_lookup () from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
#1 0x00007f62445fa49f in X509_STORE_load_locations () from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
#2 0x00007f6246a268c5 in ?? () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#3 0x00007f6246a27b15 in Curl_ossl_connect () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#4 0x00007f6246a3b0b9 in Curl_ssl_connect () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#5 0x00007f6246a11f80 in Curl_http_connect () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#6 0x00007f6246a22bea in Curl_protocol_connect () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#7 0x00007f6246a22e9a in Curl_setup_conn () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#8 0x00007f6246a22f44 in Curl_connect () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#9 0x00007f6246a2e2a1 in ?? () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#10 — here is my code with curl_easy_perform(curl);

More over, I found the curl multithread example and it crashes too, with SEGFAULT and the same call stack:

#0 0x00007fe954d454d0 in X509_STORE_add_lookup () from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
#1 0x00007fe954d3e49f in X509_STORE_load_locations () from /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
#2 0x00007fe955d1f8c5 in ?? () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#3 0x00007fe955d20b15 in Curl_ossl_connect () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#4 0x00007fe955d340b9 in Curl_ssl_connect () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#5 0x00007fe955d0af80 in Curl_http_connect () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#6 0x00007fe955d1bbea in Curl_protocol_connect () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#7 0x00007fe955d1be9a in Curl_setup_conn () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#8 0x00007fe955d1bf44 in Curl_connect () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#9 0x00007fe955d272a1 in ?? () from /usr/lib/x86_64-linux-gnu/libcurl.so.4
#10 0x000000000044251d in pull_one_url (url=0x44cac4) at ../src/Main.cpp:124
#11 0x00007fe955001e9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#12 0x00007fe95530b3fd in clone () from /lib/x86_64-linux-gnu/libc.so.6
#13 0x0000000000000000 in ?? ()

My system: Ubuntu 12.04 x64, OpenSSL 1.0.1 GCC 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

UPD1:
After removing all my code line by line I found that my app(and CURL example too, I added that code before main func) crushes when next code exists(even if it wasn't called from anywhere!!!):

#include "openssl/md5.h"
char* MD5_dcsadcsa(char* dest, const char* src, size_t length)
{
    unsigned char result[MD5_DIGEST_LENGTH];
    ::MD5((unsigned char*) src, length, result);
    for(int i = 0; i < MD5_DIGEST_LENGTH; ++i)
        sprintf(&dest[2 * i], "%02x", result[i]);
    return dest;
}

g++ -D_DEBUG -I/usr/include/boost -I/usr/include/mysql -O2 -ggdb -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "main.cpp"
g++ -o "app_backend" main.o -lmysqlclient_r -lcurl -lgnutls-openssl
./app_backend

Thread 0, gets https://www.example.com/
Thread 1, gets https://www2.example.com/
Thread 2, gets https://www3.example.com/
Thread 3, gets https://www4.example.com/
Segmentation fault (core dumped)

UPD2:
With MD5 call commented app doesn't crush

//::MD5((unsigned char*) src, length, result);
Était-ce utile?

La solution

I just removed -lgnutls-openssl and it works.
I used it in previous version of app only for caclulating md5 checksum.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top