Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

libcurl strange crashes after Idle time

I use libcurl for FTP works and it works fine but if left idle for some time it just crashes. Here is the backtrace which despite reading it for some time I cannot make sense of what is wrong. The trace does not show where in my functions crash originates and so am left orphan here by debugger. I use threads if that add value Compiler is GCC 4.7 on Linux

0  0x00007fff8e09b524  addbyter  /home/stefano/Desktop/myproject/curl-7.33.0/lib/mprintf.c  914
1  0x00007fff8e09a32f  dprintf_formatf  /home/stefano/Desktop/myproject/curl-7.33.0/lib/mprintf.c  572
2  0x00007fff8e09b5a4  curl_mvsnprintf  /home/stefano/Desktop/myproject/curl-7.33.0/lib/mprintf.c  932
3  0x00007fff8e089510  Curl_failf  /home/stefano/Desktop/myproject/curl-7.33.0/lib/sendf.c  152
4  0x00007fff8e07dbf4  Curl_resolv_timeout  /home/stefano/Desktop/myproject/curl-7.33.0/lib/hostip.c  618
5  0x00007fff78012bf8  ??    
6  0x000000c300000016  ??    
7  0x00007fff8e0d3604  ??    
8  0x0000000000000002  ??    
9  0x00000000001b7740  ??    
10  0x0000000000000000  ??    

UPDATE 1 Run it again under debugger and met a crash at the line

FILE *fd; 
fd = fopen(files[i].c_str(), "rb"); //<---here goes the crash!

files[i].c_str() is supposed to give const* char from wxString The new BT is

0  0x00007fff8e08952a  Curl_failf  /home/stefano/Desktop/myproject/curl-7.33.0/lib/sendf.c  154
1  0x00007fff8e07dbf4  Curl_resolv_timeout  /home/stefano/Desktop/myproject/curl-7.33.0/lib/hostip.c  618
2  0x00007fff780158c8  ??    
3  0x00000000001b7730  ??    
4  0x00007fff78009808  ??    
5  0x00007fff78015e79  ??    
6  0x00007fff78009808  ??    
7  0x00007fff8c8a04a0  ??    
8  0x00007fff8e0c84ca  ftp_multi_statemach  /home/stefano/Desktop/myproject/curl-7.33.0/lib/ftp.c  3113
like image 555
Stefano Mtangoo Avatar asked Dec 30 '13 07:12

Stefano Mtangoo


1 Answers

Such error can be caused if you're using curl in non-main thread. When curl can't resolve dns entry, it sends a signal (by default) to interrupt a thread by timeout. Signals are not thread safe and can cause a crash. You should compile libcurl with --enable-threaded-resolver or with support of c-ares.

Also for me it was useful to disable signals at all

curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1)
like image 155
Ivan Fateev Avatar answered Nov 20 '22 16:11

Ivan Fateev