From 430b403a2476d7debcfcf263565cafdd62ef62f0 Mon Sep 17 00:00:00 2001 From: Aydar Kamaltdinov Date: Sun, 23 Aug 2026 11:35:15 +0300 Subject: [PATCH] =?UTF-8?q?=EF=BB=BF=EF=BB=BFserver:=20close=20thread->esy?= =?UTF-8?q?nc=5Fapc=5Ffd=20in=20destroy=5Fthread=20(fixes=20per-thread=20e?= =?UTF-8?q?ventfd=20leak)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Bug `create_thread()` allocates two eventfds per thread object: ```c thread->esync_fd = esync_create_fd( 0, 0 ); thread->esync_apc_fd = esync_create_fd( 0, 0 ); but destroy_thread() only closes one of them. esync_apc_fd is referenced elsewhere only via esync_wake_fd() / esync_clear() (APC signaling) — never close()d anywhere in the tree. --- server/thread.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/thread.c b/server/thread.c index 25b91a9b74a6..51adb0763f77 100644 --- a/server/thread.c +++ b/server/thread.c @@ -531,7 +531,10 @@ static void destroy_thread( struct object *obj ) if (thread->token) release_object( thread->token ); if (do_esync()) + { close( thread->esync_fd ); + close( thread->esync_apc_fd ); + } if (thread->fsync_idx) { fsync_free_shm_idx( thread->fsync_idx );