]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
close and free on shutdown
authorAlan T. DeKok <aland@freeradius.org>
Mon, 28 Jul 2025 19:47:51 +0000 (15:47 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 28 Jul 2025 21:47:05 +0000 (17:47 -0400)
src/lib/bio/fd.c
src/lib/bio/retry.c

index 8638ea7ebc6b00543f5f71c9600d2a87380f8496..bd15f9592572880ac67870cae119a7e073adc45d 100644 (file)
@@ -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;
 }
index b6f78cd84e5a94dcf21c9d4a459069127f691a10..f4a03bc9c2d845aa09052afd4e3c693814440dfb 100644 (file)
@@ -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