mirror of
https://github.com/curl/curl.git
synced 2026-04-21 07:42:11 +03:00
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 |
||
|---|---|---|
| .. | ||
| BUFQ.md | ||
| BUFREF.md | ||
| CHECKSRC.md | ||
| CLIENT-READERS.md | ||
| CLIENT-WRITERS.md | ||
| CODE_STYLE.md | ||
| CONNECTION-FILTERS.md | ||
| DYNBUF.md | ||
| HASH.md | ||
| LLIST.md | ||
| MID.md | ||
| MQTT.md | ||
| MULTI-EV.md | ||
| NEW-PROTOCOL.md | ||
| PORTING.md | ||
| README.md | ||
| SPLAY.md | ||
| STRPARSE.md | ||
| TLS-SESSIONS.md | ||
| UINT_SETS.md | ||
| WEBSOCKET.md | ||
Internals
This directory contains documentation covering libcurl internals; APIs and concepts that are useful for contributors and maintainers.
Public APIs are documented in the public documentation, not here.