From 81d4ae0f5c5567a2f3ab1406feec12b58ff704df Mon Sep 17 00:00:00 2001 From: "Alan T. DeKok" Date: Mon, 28 Jul 2025 15:47:51 -0400 Subject: [PATCH] close and free on shutdown --- src/lib/bio/fd.c | 15 +++++++++++++-- src/lib/bio/retry.c | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/lib/bio/fd.c b/src/lib/bio/fd.c index 8638ea7ebc..bd15f95925 100644 --- a/src/lib/bio/fd.c +++ b/src/lib/bio/fd.c @@ -106,11 +106,20 @@ static int fr_bio_fd_destructor(fr_bio_fd_t *my) my->connect.el = NULL; } - if (my->cb.shutdown) my->cb.shutdown(&my->bio); - return fr_bio_fd_close(&my->bio); } +/** Orderly shutdown. + * + */ +static void fr_bio_fd_shutdown(fr_bio_t *bio) +{ + fr_bio_fd_t *my = talloc_get_type_abort(bio, fr_bio_fd_t); + + (void) fr_bio_fd_destructor(my); + talloc_set_destructor(my, NULL); +} + static int fr_bio_fd_eof(fr_bio_t *bio) { fr_bio_fd_t *my = talloc_get_type_abort(bio, fr_bio_fd_t); @@ -992,6 +1001,7 @@ fr_bio_t *fr_bio_fd_alloc(TALLOC_CTX *ctx, fr_bio_fd_config_t const *cfg, size_t my->priv_cb.eof = fr_bio_fd_eof; my->priv_cb.write_resume = fr_bio_fd_write_resume; + my->priv_cb.shutdown = fr_bio_fd_shutdown; talloc_set_destructor(my, fr_bio_fd_destructor); return (fr_bio_t *) my; @@ -1054,6 +1064,7 @@ retry: my->info.read_blocked = true; my->info.write_blocked = true; my->info.eof = true; + my->info.socket.fd = -1; return 0; } diff --git a/src/lib/bio/retry.c b/src/lib/bio/retry.c index b6f78cd84e..f4a03bc9c2 100644 --- a/src/lib/bio/retry.c +++ b/src/lib/bio/retry.c @@ -893,6 +893,7 @@ static void fr_bio_retry_shutdown(fr_bio_t *bio) fr_bio_retry_t *my = talloc_get_type_abort(bio, fr_bio_retry_t); (void) fr_bio_retry_destructor(my); + talloc_set_destructor(my, NULL); } /** Allocate a #fr_bio_retry_t -- 2.47.2