From: Alan T. DeKok Date: Sat, 30 Mar 2024 20:44:41 +0000 (-0400) Subject: minor fixes X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5a8e73412d5c43fb7a3deaed214686bada712b43;p=thirdparty%2Ffreeradius-server.git minor fixes the uctx for the timer is the bio, not the item. call rewrite() with our bio, not the next one check that things are initialized clean up all outstanding timers when there's nothing left to do --- diff --git a/src/lib/bio/retry.c b/src/lib/bio/retry.c index 4fa1bd797c5..19076a45c82 100644 --- a/src/lib/bio/retry.c +++ b/src/lib/bio/retry.c @@ -102,7 +102,7 @@ static int fr_bio_retry_reset_timer(fr_bio_retry_t *my) */ first = fr_rb_first(&my->rb); if (!first) { - fr_assert(!my->ev); + talloc_const_free(my->ev); my->first = NULL; return 0; } @@ -319,12 +319,11 @@ ssize_t fr_bio_retry_rewrite(fr_bio_t *bio, fr_bio_retry_entry_t *item, const vo static void fr_bio_retry_timer(UNUSED fr_event_list_t *el, fr_time_t now, void *uctx) { ssize_t rcode; - fr_bio_retry_entry_t *item = uctx; /* NOT individually talloc'd */ - fr_bio_retry_t *my = talloc_get_type_abort(item->my, fr_bio_retry_t); + fr_bio_retry_t *my = talloc_get_type_abort(uctx, fr_bio_retry_t); + fr_bio_retry_entry_t *item; fr_retry_state_t state; - fr_bio_t *next; - fr_assert(item == my->first); + item = my->first; my->first = NULL; /* @@ -338,12 +337,6 @@ static void fr_bio_retry_timer(UNUSED fr_event_list_t *el, fr_time_t now, void * return; } - /* - * There must be a next bio. - */ - next = fr_bio_next(&my->bio); - fr_assert(next != NULL); - /* * Write out the packet. On failure release this item. * @@ -352,9 +345,9 @@ static void fr_bio_retry_timer(UNUSED fr_event_list_t *el, fr_time_t now, void * * application, and not by us. */ if (item->rewrite) { - rcode = item->rewrite(next, item, item->buffer, item->size); + rcode = item->rewrite(&my->bio, item, item->buffer, item->size); } else { - rcode = my->rewrite(next, item, item->buffer, item->size); + rcode = my->rewrite(&my->bio, item, item->buffer, item->size); } if (rcode < 0) { fr_bio_retry_release(my, item, FR_BIO_RETRY_WRITE_ERROR); @@ -445,6 +438,7 @@ static ssize_t fr_bio_retry_write(fr_bio_t *bio, void *packet_ctx, void const *b item = fr_bio_retry_list_pop_head(&my->free); fr_assert(item != NULL); + fr_assert(item->my == my); item->retry.config = NULL; item->retry.start = fr_time(); item->packet_ctx = packet_ctx; @@ -645,6 +639,8 @@ int fr_bio_retry_entry_start(UNUSED fr_bio_t *bio, fr_bio_retry_entry_t *item, f if (item->retry.config) return -1; + fr_assert(fr_time_delta_unwrap(cfg->irt) != 0); + fr_retry_init(&item->retry, item->retry.start, cfg); return 0;