| commit | 909af1a43b5a7fed8b5a4ca145e39f46b2f50325 | [log] [tgz] |
|---|---|---|
| author | Stefan Eissing <stefan@eissing.org> | Tue Mar 25 09:47:40 2025 +0100 |
| committer | Daniel Stenberg <daniel@haxx.se> | Thu Apr 17 17:28:38 2025 +0200 |
| tree | eb438711e9b5c123a90d5947903eb5e196b8a125 | |
| parent | 02e9690c3ee2feb7c78c93c1c544c898df733383 [diff] |
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
curl is a command-line tool for transferring data specified with URL syntax. Learn how to use curl by reading the manpage or everything curl.
Find out how to install curl by reading the INSTALL document.
libcurl is the library curl is using to do its job. It is readily available to be used by your software. Read the libcurl manpage to learn how.
curl is Open Source and is distributed under an MIT-like license.
Contact us on a suitable mailing list or use GitHub issues/ pull requests/ discussions.
All contributors to the project are listed in the THANKS document.
For commercial support, maybe private and dedicated help with your problems or applications using (lib)curl visit the support page.
Visit the curl website for the latest news and downloads.
Download the latest source from the Git server:
git clone https://github.com/curl/curl.git
Report suspected security problems via our HackerOne page and not in public.
curl contains pieces of source code that is Copyright (c) 1998, 1999 Kungliga Tekniska Högskolan. This notice is included here to comply with the distribution terms.
Thank you to all our backers 🙏 Become a backer.
Support this project by becoming a sponsor.