mirror of
https://github.com/curl/curl.git
synced 2026-08-26 14:03:35 +03:00
hash_offt: standalone hash for curl_off_t
Add a standalong hash table for curl_offt_t as key. This allows a smaller memory footprint and faster lookups as we do not need to deal with variable key lengths. Use in all places we had the standard hash for this purpose. Closes #16442
This commit is contained in:
parent
2809723ddf
commit
1aa69221be
14 changed files with 392 additions and 110 deletions
12
lib/http2.c
12
lib/http2.c
|
|
@ -29,7 +29,7 @@
|
|||
#include <nghttp2/nghttp2.h>
|
||||
#include "urldata.h"
|
||||
#include "bufq.h"
|
||||
#include "hash.h"
|
||||
#include "hash_offt.h"
|
||||
#include "http1.h"
|
||||
#include "http2.h"
|
||||
#include "http.h"
|
||||
|
|
@ -135,7 +135,7 @@ struct cf_h2_ctx {
|
|||
struct bufc_pool stream_bufcp; /* spares for stream buffers */
|
||||
struct dynbuf scratch; /* scratch buffer for temp use */
|
||||
|
||||
struct Curl_hash streams; /* hash of `data->mid` to `h2_stream_ctx` */
|
||||
struct Curl_hash_offt streams; /* hash of `data->mid` to `h2_stream_ctx` */
|
||||
size_t drain_total; /* sum of all stream's UrlState drain */
|
||||
uint32_t max_concurrent_streams;
|
||||
uint32_t goaway_error; /* goaway error code from server */
|
||||
|
|
@ -155,7 +155,7 @@ struct cf_h2_ctx {
|
|||
#define CF_CTX_CALL_DATA(cf) \
|
||||
((struct cf_h2_ctx *)(cf)->ctx)->call_data
|
||||
|
||||
static void h2_stream_hash_free(void *stream);
|
||||
static void h2_stream_hash_free(curl_off_t id, void *stream);
|
||||
|
||||
static void cf_h2_ctx_init(struct cf_h2_ctx *ctx, bool via_h1_upgrade)
|
||||
{
|
||||
|
|
@ -176,8 +176,7 @@ static void cf_h2_ctx_free(struct cf_h2_ctx *ctx)
|
|||
Curl_bufq_free(&ctx->outbufq);
|
||||
Curl_bufcp_free(&ctx->stream_bufcp);
|
||||
Curl_dyn_free(&ctx->scratch);
|
||||
Curl_hash_clean(&ctx->streams);
|
||||
Curl_hash_destroy(&ctx->streams);
|
||||
Curl_hash_offt_destroy(&ctx->streams);
|
||||
memset(ctx, 0, sizeof(*ctx));
|
||||
}
|
||||
free(ctx);
|
||||
|
|
@ -267,8 +266,9 @@ static void h2_stream_ctx_free(struct h2_stream_ctx *stream)
|
|||
free(stream);
|
||||
}
|
||||
|
||||
static void h2_stream_hash_free(void *stream)
|
||||
static void h2_stream_hash_free(curl_off_t id, void *stream)
|
||||
{
|
||||
(void)id;
|
||||
DEBUGASSERT(stream);
|
||||
h2_stream_ctx_free((struct h2_stream_ctx *)stream);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue