Version: libcurl-8.2.1-1.fc39.x86_64

Any thoughts on the segfault below?  This is most likely a bug in my
program, but I can't quite see exactly where.  It only happens when I
crank the number of threads adding easy handles to >= 128.

'stream' is NULL.

Program terminated with signal SIGSEGV, Segmentation fault.

warning: Section `.reg-xstate/157722' in core file too small.
#0  stream_recv (cf=cf@entry=0x7fe0542a7260, data=data@entry=0x7fdd78001010, 
    buf=buf@entry=0x7fe05423ce80 "", len=len@entry=16384, 
    err=err@entry=0x7fe062a52824) at ../../lib/http2.c:1742
1742      if(!Curl_bufq_is_empty(&stream->recvbuf)) {                           
[Current thread is 1 (Thread 0x7fe062a536c0 (LWP 157722))]
(gdb) bt
#0  stream_recv (cf=cf@entry=0x7fe0542a7260, data=data@entry=0x7fdd78001010, 
    buf=buf@entry=0x7fe05423ce80 "", len=len@entry=16384, 
    err=err@entry=0x7fe062a52824) at ../../lib/http2.c:1742
#1  0x00007fe0632f58db in cf_h2_recv (cf=0x7fe0542a7260, data=0x7fdd78001010, 
    buf=0x7fe05423ce80 "", len=16384, err=0x7fe062a52824)
    at ../../lib/http2.c:1844
#2  0x00007fe06331036e in Curl_read (data=<optimized out>, 
    sockfd=<optimized out>, buf=<optimized out>, 
    sizerequested=<optimized out>, n=0x7fe062a528d8) at ../../lib/sendf.c:415
#3  0x00007fe0633214f1 in readwrite_data (comeback=<optimized out>, 
    done=<optimized out>, didwhat=<synthetic pointer>, k=0x7fdd780010f0, 
    conn=0x7fe054240e90, data=0x7fdd78001010) at ../../lib/transfer.c:463
#4  Curl_readwrite (conn=0x7fe054240e90, data=0x7fdd78001010, 
    done=<optimized out>, comeback=<optimized out>)
    at ../../lib/transfer.c:1118
#5  0x00007fe063308220 in multi_runsingle (multi=multi@entry=0x5581652ed530, 
    nowp=nowp@entry=0x7fe062a52a50, data=data@entry=0x7fdd78001010)
    at ../../lib/multi.c:2459
#6  0x00007fe06330b405 in curl_multi_perform (multi=0x5581652ed530, 
    running_handles=running_handles@entry=0x7fe062a52b70)
    at ../../lib/multi.c:2756
#7  0x00007fe063f44490 in process_multi_handle ()
    at /home/rjones/d/nbdkit/plugins/curl/pool.c:286
#8  pool_worker (vp=<optimized out>)
    at /home/rjones/d/nbdkit/plugins/curl/pool.c:243
#9  0x00007fe06388e887 in start_thread (arg=<optimized out>)
    at pthread_create.c:444
#10 0x00007fe06391592c in clone3 ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

The program is:

https://gitlab.com/rwmjones/nbdkit/-/blob/2023-curl-multi/plugins/curl/pool.c?ref_type=heads

There is only one thread running the multi handle, so I don't think
it's a corruption or locking problem.  I think I'm checking the return
value of every curl call, and no errors are printed, so I don't think
curl is returning an error before the crash happens, unless I've
missed something.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top

-- 
Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html

Reply via email to