From 1f541d6432725a66f2b6acf87bb4cf84bacf2682 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Thu, 2 Jul 2026 16:38:31 +0300 Subject: [PATCH] tcp_io: save read_queue to local var before queue_data_put, add NULL guard after --- lib/tcp_io.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/tcp_io.c b/lib/tcp_io.c index d22e7f74..fc0b11eb 100644 --- a/lib/tcp_io.c +++ b/lib/tcp_io.c @@ -209,8 +209,10 @@ static void read_cb(socket_t sock, void* arg) { if (n > 0) { e->dgram = buf; e->len = (uint16_t)n; - queue_data_put(tc->read_queue, e); - if (tc->read_queue->count >= tc->read_high_water && !tc->read_paused) { + struct ll_queue* rq = tc->read_queue; + queue_data_put(rq, e); + // tc мог быть уничтожен через callback chain — read_queue обнулён + if (rq && tc->read_queue && tc->read_queue->count >= tc->read_high_water && !tc->read_paused) { uasync_set_socket_read(tc->ua, tc->socket_id, 0); tc->read_paused = 1; queue_waiter_wait(tc->read_queue, &tc->read_waiter, resume_read_cb, tc);