http://oirase.annexia.org/tmp/no-stream-verbose.txt

^^ This is the output when nbdkit / curl crashes, with CURLOPT_VERBOSE == 1.

For a bit of background, there are about 270 threads which have
submitted an easy handle to the background thread.  The background
thread adds these to a single multi handle and processes it in a loop:

https://gitlab.com/rwmjones/nbdkit/-/blob/e5f11c7df8c648a6e1e11a370f99b6d41ea3b98c/plugins/curl/pool.c#L233

Looking at the core dump, it seems there are 117 easy handles on the
multi when it crashes:

(gdb) print *(struct Curl_multi *)multi
$3 = {magic = 764702, easyp = 0x7fccbc001010, easylp = 0x7fca78001010, 
  num_easy = 117, num_alive = 117, msglist = {head = 0x0, tail = 0x0, 
    dtor = 0x0, size = 0}, pending = {head = 0x0, tail = 0x0, dtor = 0x0, 
    size = 0}, msgsent = {head = 0x0, tail = 0x0, dtor = 0x0, size = 0}, 
  socket_cb = 0x0, socket_userp = 0x0, push_cb = 0x0, push_userp = 0x0, 
  hostcache = {table = 0x7fcd5c006c50, 
    hash_func = 0x7fcd6d4e1150 <Curl_hash_str>, 
    comp_func = 0x7fcd6d4e2df0 <Curl_str_key_compare>, 
    dtor = 0x7fcd6d4e11d0 <freednsentry>, slots = 71, size = 1}, psl = {
    psl = 0x0, expires = 0, dynamic = false}, timetree = 0x7fca78001ec8, 
  ssl_backend_data = 0x0, sockhash = {table = 0x0, 
    hash_func = 0x7fcd6d4f6380 <hash_fd>, 
    comp_func = 0x7fcd6d4f6370 <fd_key_compare>, 
    dtor = 0x7fcd6d4f6360 <sh_freeentry>, slots = 911, size = 0}, 
  conn_cache = {hash = {table = 0x7fcd5c005d20, 
      hash_func = 0x7fcd6d4e1150 <Curl_hash_str>, 
      comp_func = 0x7fcd6d4e2df0 <Curl_str_key_compare>, 
      dtor = 0x7fcd6d4c92c0 <Curl_resolver_cleanup>, slots = 97, size = 1}, 
    num_conn = 5, next_connection_id = 5, next_easy_id = 133, last_cleanup = {
      tv_sec = 3012568, tv_usec = 71694}, closure_handle = 0x558655710cf0}, 
  maxconnects = -1, max_host_connections = 0, max_total_connections = 16, 
  timer_cb = 0x0, timer_userp = 0x0, timer_lastcall = {tv_sec = 0, 
    tv_usec = 0}, max_concurrent_streams = 100, wakeup_pair = {3, 4}, 
  ipv6_up = 2 '\002', multiplexing = 1, recheckstate = 0, in_callback = 0, 
  ssl_seeded = 0, dead = 0}


I can reproduce the problem very readily.  The problem for
reproduction is not building nbdkit, but having a local HTTP/2 server
with a sufficiently large file (10GB in this case).  The reproducer
command (run from the nbdkit build directory) is:

$ ./nbdkit -r -U - curl http://dev3.home.annexia.org/html/fedora-36.qcow2 
http-version=2.0 --run 'nbdcopy -p $uri null: --connections=16 ' -fv -D 
curl.verbose=1

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
nbdkit - Flexible, fast NBD server with plugins
https://gitlab.com/nbdkit/nbdkit

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

Reply via email to