Segfaults in std.net.curl default onReceiveHeader

Steven Wright via Digitalmars-d digitalmars-d at puremagic.com
Sat May 9 16:09:43 PDT 2015


Hey,

I currently have an application that's been running for a couple 
months in production without an issue. Recently, we made a couple 
changes unrelated to our network layer, and are currently getting 
segfaults in std.net.curl's HTTP, with the mostly default 
settings. I don't believe the changes we made would relate to 
this, but is it possible this is a user error? We do not set 
onReceiveHeader in our application.

They may be several hundred concurrent connections open, but they 
are carefully isolated within their own thread's with 
CurlOption.nosignal set.

This is a backtrace I got from one of the core dumps, they all 
look similar:

(gdb) bt
#0  0x00000000005e1242 in std.net.curl.Curl.throwOnStopped() ()
#1  0x00000000005e1676 in std.net.curl.Curl.onReceiveHeader() ()
#2  0x00000000005e1927 in 
std.net.curl.Curl._receiveHeaderCallback() ()
#3  0x00007fede92b1d2d in Curl_client_chop_write 
(conn=conn at entry=0x7fea64059210, type=type at entry=2,
     ptr=0x5ea5940 "@W\272+\355\177", len=17) at sendf.c:457
#4  0x00007fede92b1eb0 in Curl_client_write 
(conn=conn at entry=0x7fea64059210, type=type at entry=2, 
ptr=<optimized out>,
     len=<optimized out>) at sendf.c:514
#5  0x00007fede92b03c5 in Curl_http_readwrite_headers 
(data=data at entry=0x5ea5d40, conn=conn at entry=0x7fea64059210,
     nread=nread at entry=0x7fe7f5780d18, 
stop_reading=stop_reading at entry=0x7fe7f5780d17) at http.c:3744
#6  0x00007fede92c6418 in readwrite_data (done=0x7fe7f5780da3, 
didwhat=<synthetic pointer>, k=0x5ea5db8,
     conn=0x7fea64059210, data=0x5ea5d40) at transfer.c:482
#7  Curl_readwrite (conn=0x7fea64059210, 
done=done at entry=0x7fe7f5780da3) at transfer.c:1066
#8  0x00007fede92d037a in multi_runsingle 
(multi=multi at entry=0x7fea6400bb30, now=..., 
data=data at entry=0x5ea5d40)
     at multi.c:1521
#9  0x00007fede92d0b69 in curl_multi_perform 
(multi_handle=multi_handle at entry=0x7fea6400bb30,
     running_handles=running_handles at entry=0x7fe7f5780e74) at 
multi.c:1802
#10 0x00007fede92c7ffc in easy_transfer (multi=0x7fea6400bb30) at 
easy.c:717
#11 easy_perform (events=false, data=0x5ea5d40) at easy.c:805
#12 curl_easy_perform (easy=0x5ea5d40) at easy.c:824
#13 0x00000000005e14a6 in std.net.curl.Curl.perform() ()
#14 0x00000000005df041 in std.net.curl.HTTP.perform() ()

Another one which looks slightly different:

#0  0x00000000005de6f3 in 
std.net.curl.HTTP.Impl.onReceiveHeader() ()
#1  0x00000000005e16ee in std.net.curl.Curl.onReceiveHeader() ()
#2  0x00000000005e1987 in 
std.net.curl.Curl._receiveHeaderCallback() ()
#3  0x00007f0ad8140d2d in Curl_client_chop_write 
(conn=conn at entry=0x7f05e819e190, type=type at entry=2,
     ptr=0x7f0a1a4e0200 "", len=23) at sendf.c:457
#4  0x00007f0ad8140eb0 in Curl_client_write 
(conn=conn at entry=0x7f05e819e190, type=type at entry=2, 
ptr=<optimized out>,
     len=<optimized out>) at sendf.c:514
#5  0x00007f0ad813f3c5 in Curl_http_readwrite_headers 
(data=data at entry=0x3ec64b0, conn=conn at entry=0x7f05e819e190,
     nread=nread at entry=0x7f061bffddf8, 
stop_reading=stop_reading at entry=0x7f061bffddf7) at http.c:3744
#6  0x00007f0ad8155418 in readwrite_data (done=0x7f061bffde83, 
didwhat=<synthetic pointer>, k=0x3ec6528,
     conn=0x7f05e819e190, data=0x3ec64b0) at transfer.c:482
#7  Curl_readwrite (conn=0x7f05e819e190, 
done=done at entry=0x7f061bffde83) at transfer.c:1066
#8  0x00007f0ad815f37a in multi_runsingle 
(multi=multi at entry=0x7f05e80bae70, now=..., 
data=data at entry=0x3ec64b0)
     at multi.c:1521
#9  0x00007f0ad815fb69 in curl_multi_perform 
(multi_handle=multi_handle at entry=0x7f05e80bae70,
     running_handles=running_handles at entry=0x7f061bffdf54) at 
multi.c:1802
#10 0x00007f0ad8156ffc in easy_transfer (multi=0x7f05e80bae70) at 
easy.c:717
#11 easy_perform (events=false, data=0x3ec64b0) at easy.c:805
#12 curl_easy_perform (easy=0x3ec64b0) at easy.c:824
#13 0x00000000005e1506 in std.net.curl.Curl.perform() ()
#14 0x00000000005df0a1 in std.net.curl.HTTP.perform() ()


More information about the Digitalmars-d mailing list