Packages
hackney
2.0.0-beta.1
4.7.2
4.7.1
4.7.0
4.6.1
4.6.0
4.5.2
4.5.1
4.5.0
4.4.5
4.4.3
4.4.2
4.4.1
4.4.0
4.3.0
4.2.3
4.2.2
4.2.1
4.2.0
4.1.0
4.0.3
4.0.2
4.0.1
4.0.0
3.2.1
3.2.0
3.1.2
3.1.1
3.1.0
3.0.3
3.0.2
3.0.1
3.0.0
retired
2.0.1
2.0.0
2.0.0-beta.1
1.25.0
1.24.1
1.24.0
1.23.0
1.22.0
1.21.0
1.20.1
1.20.0
1.19.1
1.19.0
1.18.2
1.18.1
1.18.0
1.17.4
1.17.3
1.17.2
1.17.1
1.17.0
1.16.0
1.15.2
1.15.1
1.15.0
1.14.3
1.14.2
1.14.0
1.13.0
1.12.1
1.12.0
1.11.0
1.10.1
1.10.0
1.9.0
1.8.6
1.8.5
1.8.4
1.8.3
1.8.2
1.8.0
1.7.1
1.7.0
1.6.6
retired
1.6.5
1.6.4
retired
1.6.3
1.6.2
1.6.1
1.6.0
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.10
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.0
1.1.0
1.0.6
1.0.5
1.0.2
1.0.1
0.15.2
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
Simple HTTP client with HTTP/1.1, HTTP/2, and HTTP/3 support
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
c_src/lsquic/src/liblsquic/lsquic_mm.h
/* Copyright (c) 2017 - 2022 LiteSpeed Technologies Inc. See LICENSE. */
/*
* lsquic_mm.h -- Memory manager.
*
* Allocators and in this class are meant to be used for the lifetime of
* QUIC engine.
*/
#ifndef LSQUIC_MM_H
#define LSQUIC_MM_H 1
struct lsquic_engine_public;
struct lsquic_packet_in;
struct lsquic_packet_out;
struct ack_info;
struct malo;
struct mini_conn;
struct pool_stats
{
unsigned ps_calls; /* Calls to get/put */
unsigned ps_max; /* Maximum during this sample period */
unsigned ps_max_avg, /* Average maximum value */
ps_max_var;
unsigned ps_objs_all; /* Number of objects owned by the pool */
unsigned ps_objs_out; /* Number of objects in use */
};
#define MM_N_OUT_BUCKETS 5
#define MM_N_IN_BUCKETS 3
struct lsquic_mm {
struct ack_info *acki;
struct {
struct malo *stream_frame; /* For struct stream_frame */
struct malo *frame_rec_arr; /* For struct frame_rec_arr */
struct malo *mini_conn; /* For struct mini_conn */
struct malo *mini_conn_ietf;/* For struct ietf_mini_conn */
struct malo *packet_in; /* For struct lsquic_packet_in */
struct malo *packet_out; /* For struct lsquic_packet_out */
struct malo *dcid_elem; /* For struct dcid_elem */
struct malo *stream_hq_frame; /* For struct stream_hq_frame */
} malo;
TAILQ_HEAD(, lsquic_packet_in) free_packets_in;
SLIST_HEAD(, packet_out_buf) packet_out_bufs[MM_N_OUT_BUCKETS];
struct pool_stats packet_out_bstats[MM_N_OUT_BUCKETS];
struct pool_stats packet_in_bstats[MM_N_IN_BUCKETS];
SLIST_HEAD(, packet_in_buf) packet_in_bufs[MM_N_IN_BUCKETS];
SLIST_HEAD(, four_k_page) four_k_pages;
SLIST_HEAD(, sixteen_k_page) sixteen_k_pages;
char *ack_str;
};
int
lsquic_mm_init (struct lsquic_mm *);
void
lsquic_mm_cleanup (struct lsquic_mm *);
struct lsquic_packet_in *
lsquic_mm_get_packet_in (struct lsquic_mm *);
void
lsquic_mm_put_packet_in (struct lsquic_mm *, struct lsquic_packet_in *);
#define lsquic_packet_in_put(mm, p) do { \
assert((p)->pi_refcnt != 0); \
if (--(p)->pi_refcnt == 0) \
lsquic_mm_put_packet_in(mm, p); \
} while (0)
struct lsquic_packet_out *
lsquic_mm_get_packet_out (struct lsquic_mm *, struct malo *,
unsigned short size);
void
lsquic_mm_put_packet_out (struct lsquic_mm *, struct lsquic_packet_out *);
void *
lsquic_mm_get_packet_in_buf (struct lsquic_mm *, size_t);
void
lsquic_mm_put_packet_in_buf (struct lsquic_mm *, void *, size_t);
void *
lsquic_mm_get_4k (struct lsquic_mm *);
void
lsquic_mm_put_4k (struct lsquic_mm *, void *);
void *
lsquic_mm_get_16k (struct lsquic_mm *);
void
lsquic_mm_put_16k (struct lsquic_mm *, void *);
size_t
lsquic_mm_mem_used (const struct lsquic_mm *mm);
#endif