From: Alan T. DeKok Date: Mon, 28 Jul 2025 19:47:51 +0000 (-0400) Subject: close and free on shutdown X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=81d4ae0f5c5567a2f3ab1406feec12b58ff704df;p=thirdparty%2Ffreeradius-server.git close and free on shutdown --- 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