From 5bc6c9f2d09cbb8992d9b4ec4406bcaa64a182dc Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Thu, 4 Jul 2024 22:25:03 +0200 Subject: [PATCH] tcp_terminal: fix destruction of Open_socket The socket API close() must be called within a libc context. Moreover, the socket for listening needs to be closed as well. Fixes #5270 --- repos/gems/src/server/tcp_terminal/main.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/repos/gems/src/server/tcp_terminal/main.cc b/repos/gems/src/server/tcp_terminal/main.cc index dd71281996..e1a4836ad1 100644 --- a/repos/gems/src/server/tcp_terminal/main.cc +++ b/repos/gems/src/server/tcp_terminal/main.cc @@ -455,8 +455,16 @@ Open_socket::Open_socket(char const * ip_addr, int tcp_port) Open_socket::~Open_socket() { - if (_sd != -1) close(_sd); - open_socket_pool()->remove(this); + Libc::with_libc([&] () { + + if (_sd != -1) + close(_sd); + + if (_listen_sd != -1) + close(_listen_sd); + + open_socket_pool()->remove(this); + }); }