Получение сигнала 11 (SIGSEGV) при использовании libcurl в многопоточной программе - PullRequest
0 голосов
/ 04 октября 2019

Я сделал это
Из Google я узнал, что мы должны построить libcurl, предоставив --enable-threadaded-resolver, но это не помогло, я все еще вижу segfault
Iтакже пытался установить параметр NoSignal, но это также не помогло.
Из журналов программы кажется, что один поток зависает при вызове функции execute (из библиотеки curlpp, т.е. у нас есть запрос curlpp :: Easy; и он зависает, когда мыdo request.perform в одном потоке)
Кроме того, проблема не появляется при каждом запуске и характерна для linux, отлично работает на MAC OS и Windows.

curl / libcurlверсия
Я пробовал версии 7.21.2 и 7.66 (7.66 с --enable-threadaded-resolver)

Ошибка
В версии 7.21.2 я былполучение
== 8866 ==
== 8866 == Завершение процесса с действием по умолчанию для сигнала 11 (SIGSEGV)
== 8866 == Доступ не в сопоставленной области по адресу 0x0
== 8866== в 0x551FCDD: _IO_file_underflow @@ GLIBC_2.2.5 (в /usr/lib64/libc-2.17.so)
== 8866 == по 0x5520E81: _IO_default_uflow (в /usr/lib64/libc-2.17.so)
== 8866 == по 0x5513C33: _IO_getline_info (в /usr/lib64/libc-2.17).so)
== 8866 == от 0x551D6FC: fgets_unlocked (в /usr/lib64/libc-2.17.so)
== 8866 == от 0xF57D5AE: internal_getent (в /usr/lib64/libnss_files-2.17.so)
== 8866 == от 0xF57E7E2: _nss_files_gethostbyname4_r (в /usr/lib64/libnss_files-2.17.so)
== 8866 == от 0x558A1B3: gaih_inet.constprop.8 (в / usr / 64/64)/libc-2.17.so)
== 8866 == по 0x558B553: getaddrinfo (в /usr/lib64/libc-2.17.so)
== 8866 == по 0xCB6E013: Curl_getaddrinfo_ex (в / usr / local/qubole/libquboleodbc.so)
== 8866 == от 0xCB6AE65: Curl_getaddrinfo (в /usr/local/qubole/libquboleodbc.so)
== 8866 == от 0xCB51CF4: Curl_resolr (в / us/qubole/libquboleodbc.so)
== 8866 == от 0xCB51FBA: Curl_resolv_timeout (в /usr/local/qubole/libquboleodbc.so)

с версией 7.66 (с --enable-резьба-решатель), я начал получать
== 11063 ==
== 11063 == Процесс завершается с действием по умолчанию для сигнала 11 (SIGSEGV)
== 11063 == Доступ не в сопоставленной области по адресу 0x0
== 11063 == по адресу 0x551FCDD: _IO_file_underflow@@ GLIBC_2.2.5 (в /usr/lib64/libc-2.17.so)
== 11063 == от 0x5520E81: _IO_default_uflow (в /usr/lib64/libc-2.17.so)
== 11063 == 0x5513C33: _IO_getline_info (в /usr/lib64/libc-2.17.so)
== 11063 == 0x551D6FC: fgets_unlocked (в /usr/lib64/libc-2.17.so)
== 11063 == 0xFDAA5AE: internal_getent (в /usr/lib64/libnss_files-2.17.so)
== 11063 == 0xFDAB7E2: _nss_files_gethostbyname4_r (в /usr/lib64/libnss_files-2.17.so=) = 63= 0x558A1B3: gaih_inet.constprop.8 (в /usr/lib64/libc-2.17.so)
== 11063 == 0x558B553: getaddrinfo (в /usr/lib64/libc-2.17.so)
== 11063 == по 0xCB7D2E3: Curl_getaddrinfo_ex (в /usr/local/qubole/libquboleodbc.so)
== 11063 == по 0xCB585C0: getaddrinfo_thread (в /usr/local/qubole/libqu10)== 11063 == по 0xCB8474A: curl_thread_create_thunk (в /usr/local/qubole/libquboleodbc.so)
== 11063 == от 0xF391EA4: start_thread (в /usr/lib64/libpthread-2.17.so)

Выше видно, когда я использую Valgrind.

операционная система
RHEL 7,7

Любая помощь приветствуется.

...