curl/include/curl
Stefan Eissing 909af1a43b
multi: do transfer book keeping using mid
Change multi's book keeping of transfers to no longer use lists, but a
special table and bitsets for unsigned int values.

`multi-xfers` is the `uint_tbl` where `multi_add_handle()` inserts a new
transfer which assigns it a unique identifier `mid`. Use bitsets to keep
track of transfers that are in state "process" or "pending" or
"msgsent".

Use sparse bitsets to replace `conn->easyq` and event handlings tracking
of transfers per socket. Instead of pointers, keep the mids involved.

Provide base data structures and document them in docs/internal:
* `uint_tbl`: a table of transfers with `mid` as lookup key,
   handing out a mid for adds between 0 - capacity.
* `uint_bset`: a bitset keeping unsigned ints from 0 - capacity.
* `uint_spbset`: a sparse bitset for keeping a small number of
  unsigned int values
* `uint_hash`: for associating `mid`s with a pointer.

This makes the `mid` the recommended way to refer to transfers inside
the same multi without risk of running into a UAF.

Modifying table and bitsets is safe while iterating over them. Overall
memory requirements are lower as with the double linked list apprach.

Closes #16761
2025-04-17 17:28:38 +02:00
..
curl.h cmake: fix clang-tidy builds to verify tests, fix fallouts 2025-03-24 10:14:58 +01:00
curlver.h RELEASE-NOTES: synced 2025-04-02 22:51:06 +02:00
easy.h docs: use lowercase curl and libcurl 2025-01-02 17:15:54 +01:00
header.h copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
Makefile.am build: untangle CURLDEBUG and DEBUGBUILD macros 2024-05-28 08:12:00 +02:00
mprintf.h printf: fix mingw-w64 format checks 2024-09-02 21:03:01 +02:00
multi.h source: avoid use of 'very' in comments 2024-10-17 13:36:33 +02:00
options.h copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
stdcheaders.h copyright: update all copyright lines and remove year ranges 2023-01-03 09:19:21 +01:00
system.h multi: do transfer book keeping using mid 2025-04-17 17:28:38 +02:00
typecheck-gcc.h code: language cleanup in comments 2024-07-01 22:58:55 +02:00
urlapi.h code: language cleanup in comments 2024-07-01 22:58:55 +02:00
websockets.h websocket: rename arguments/variables to match docs 2023-07-22 00:31:31 +02:00