return pool_elt_at_index (quic_main.ctx_pool[thread_index], ctx_index);
}
+static quic_ctx_t *
+quic_ctx_get_if_valid (u32 ctx_index, u32 thread_index)
+{
+ if (pool_is_free_index (quic_main.ctx_pool[thread_index], ctx_index))
+ return 0;
+ return pool_elt_at_index (quic_main.ctx_pool[thread_index], ctx_index);
+}
+
static quic_ctx_t *
quic_get_conn_ctx (quicly_conn_t * conn)
{
static void
quic_proto_on_close (u32 ctx_index, u32 thread_index)
{
- quic_ctx_t *ctx = quic_ctx_get (ctx_index, thread_index);
+ quic_ctx_t *ctx = quic_ctx_get_if_valid (ctx_index, thread_index);
+ if (!ctx)
+ return;
#if QUIC_DEBUG >= 2
session_t *stream_session =
session_get (ctx->c_s_index, ctx->c_thread_index);
format_quic_half_open (u8 * s, va_list * args)
{
u32 qc_index = va_arg (*args, u32);
- quic_ctx_t *ctx = quic_ctx_get (qc_index, vlib_get_thread_index ());
+ u32 thread_index = va_arg (*args, u32);
+ quic_ctx_t *ctx = quic_ctx_get (qc_index, thread_index);
s = format (s, "[QUIC] half-open app %u", ctx->parent_app_id);
return s;
}
format_quic_listener (u8 * s, va_list * args)
{
u32 tci = va_arg (*args, u32);
+ u32 thread_index = va_arg (*args, u32);
u32 verbose = va_arg (*args, u32);
- quic_ctx_t *ctx = quic_ctx_get (tci, vlib_get_thread_index ());
+ quic_ctx_t *ctx = quic_ctx_get (tci, thread_index);
if (ctx)
{
ASSERT (quic_ctx_is_listener (ctx));