]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Various other timer fixes
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Tue, 22 Apr 2025 18:40:57 +0000 (13:40 -0500)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Tue, 22 Apr 2025 19:30:50 +0000 (14:30 -0500)
21 files changed:
src/bin/radsniff.c
src/lib/bio/fd.c
src/lib/bio/packet.c
src/lib/io/load.c
src/lib/io/master.c
src/lib/ldap/connection.c
src/lib/server/connection.c
src/lib/server/exec.c
src/lib/server/main_loop.c
src/lib/server/trunk.c
src/lib/unlang/xlat.c
src/lib/util/timer.h
src/listen/bfd/session.c
src/listen/detail/proto_detail_file.c
src/modules/rlm_radius/bio.c
src/modules/rlm_sql/drivers/rlm_sql_cassandra/rlm_sql_cassandra.c
src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c
src/modules/rlm_sql/drivers/rlm_sql_unixodbc/rlm_sql_unixodbc.c
src/modules/rlm_tacacs/rlm_tacacs_tcp.c
src/modules/rlm_unbound/io.c
src/modules/rlm_unbound/rlm_unbound.c

index bd045ff53ab4d5a253211451fabd349046eae5e6..d9f74306fb7d86bfa34d98c543b382e621de1004 100644 (file)
@@ -1045,12 +1045,8 @@ static int _request_free(rs_request_t *request)
                RS_ASSERT(ret);
        }
 
-       if (request->event) {
-               ret = fr_timer_delete(&request->event);
-               if (ret < 0) {
-                       fr_perror("Failed deleting timer");
-                       RS_ASSERT(0 == 1);
-               }
+       if (fr_timer_armed(request->event)) {
+               FR_TIMER_DELETE(&request->event);
        }
 
        fr_packet_free(&request->packet);
@@ -1529,7 +1525,7 @@ static void rs_packet_process(uint64_t count, rs_event_t *event, struct pcap_pkt
                                 */
                                fr_pair_list_free(&original->link_vps);
                                fr_packet_free(&original->linked);
-                               fr_timer_delete(&original->event);
+                               FR_TIMER_DELETE(&original->event);
                        /*
                         *      ...nope it's the first response to a request.
                         */
@@ -1754,7 +1750,7 @@ static void rs_packet_process(uint64_t count, rs_event_t *event, struct pcap_pkt
                        fr_pair_list_append(&original->expect_vps, &search.expect_vps);
 
                        /* Disarm the timer for the cleanup event for the original request */
-                       fr_timer_delete(&original->event);
+                       FR_TIMER_DELETE(&original->event);
                /*
                 *      ...nope it's a new request.
                 */
index 28d9251403c1c5109f20a97617cc13d7d264a07c..cd2271d383f3935a6c0f0886b021d679f4a8ea79 100644 (file)
@@ -100,8 +100,7 @@ static int fr_bio_fd_destructor(fr_bio_fd_t *my)
        fr_assert(!fr_bio_prev(&my->bio));
        fr_assert(!fr_bio_next(&my->bio));
 
-       if (unlikely(fr_timer_delete(&my->connect.ev) < 0)) fr_assert_msg(0, "failed deleting connection timer");
-
+       FR_TIMER_DELETE(&my->connect.ev);
        if (my->connect.el) {
                (void) fr_event_fd_delete(my->connect.el, my->info.socket.fd, FR_EVENT_FILTER_IO);
                my->connect.el = NULL;
@@ -1204,7 +1203,7 @@ static void fr_bio_fd_el_connect(NDEBUG_UNUSED fr_event_list_t *el, NDEBUG_UNUSE
 
        fr_assert(my->connect.success);
 
-       if (unlikely(fr_timer_delete(&my->connect.ev) < 0)) fr_assert_msg(0, "failed deleting connection timer");
+       FR_TIMER_DELETE(&my->connect.ev);
        my->connect.el = NULL;
 
        /*
index bdf72473a940e88b13b624668bd3e0cb605e88a4..b035fa5b094a2a8c1d72a56ec488115edc554640 100644 (file)
@@ -141,7 +141,7 @@ void fr_bio_packet_connected(fr_bio_t *bio)
        /*
         *      Stop any connection timeout.
         */
-       if (my->ev) talloc_const_free(&my->ev);
+       FR_TIMER_DELETE(&my->ev);
 
        /*
         *      Tell the application that the packet BIO is now usable.
index 81fec057d7e34910e078088613bdef72826e0663..760209b15749d05e4d25d7405235b0d4a2670048 100644 (file)
@@ -251,7 +251,7 @@ int fr_load_generator_start(fr_load_t *l)
  */
 int fr_load_generator_stop(fr_load_t *l)
 {
-       if (!l->ev) return 0;
+       if (!fr_timer_armed(l->ev)) return 0;
 
        return fr_timer_delete(&l->ev);
 }
index 5b8156298f07651007aeac4f8ea46ec24a808f8e..4e14b350a4cd2f802c50678257c864fd97c3f57e 100644 (file)
@@ -179,8 +179,7 @@ static fr_event_update_t resume_read[] = {
 
 static int track_free(fr_io_track_t *track)
 {
-       if (track->ev) (void) fr_timer_delete(&track->ev);
-
+       if (fr_cond_assert_msg(fr_timer_delete(&track->ev) == 0, "failed deleting tracking timer")) return -1;
        talloc_free_children(track);
 
        fr_assert(track->client->packets > 0);
@@ -1189,7 +1188,7 @@ static fr_io_track_t *fr_io_track_add(fr_io_client_t *client,
                 *      struct while the packet is in the outbound
                 *      queue.
                 */
-               if (old->ev) (void) fr_timer_delete(&old->ev);
+               FR_TIMER_DISARM(old->ev);
                return old;
        }
 
@@ -1211,7 +1210,7 @@ static fr_io_track_t *fr_io_track_add(fr_io_client_t *client,
                if (!fr_rb_delete(client->table, old)) {
                        fr_assert(0);
                }
-               if (old->ev) (void) fr_timer_delete(&old->ev);
+               FR_TIMER_DELETE(&old->ev);
 
                talloc_set_destructor(old, track_free);
 
@@ -1817,8 +1816,11 @@ have_client:
                 *      connection.  It's still in use, so we don't
                 *      want to clean it up.
                 */
-               if (client->ev) {
-                       talloc_const_free(client->ev);
+               if (fr_timer_armed(client->ev)) {
+                       if (fr_cond_assert_msg(fr_timer_delete(&client->ev) == 0,
+                                              "failed deleting client timer")) {
+                               return -1;
+                       }
                        client->ready_to_delete = false;
                }
 
@@ -2068,7 +2070,7 @@ static void client_expiry_timer(fr_timer_list_t *tl, fr_time_t now, void *uctx)
                /*
                 *      The timer is already set, don't do anything.
                 */
-               if (client->ev) return;
+               if (fr_timer_armed(client->ev)) return;
 
                switch (client->state) {
                case PR_CLIENT_CONNECTED:
index 471f91af0aada2c4c353ae5c528072dbfbe01e78..5ebb19a8272a09ac3a3a8a70a341b7bd7c02b050 100644 (file)
@@ -864,8 +864,7 @@ static void ldap_trunk_request_demux(fr_event_list_t *el, trunk_connection_t *tc
                /*
                 *      Remove the timeout event
                 */
-               if (query->ev) fr_timer_delete(&query->ev);
-
+               FR_TIMER_DELETE(&query->ev);
                query->result = result;
 
                /*
index c3d62cad7f66f5eb6134decebc3a308470ce1621..123e8e82ae0ff37a8c8f12633d0c9fea530c717f 100644 (file)
@@ -655,7 +655,7 @@ static void connection_state_enter_closed(connection_t *conn)
 
        STATE_TRANSITION(CONNECTION_STATE_CLOSED);
 
-       fr_timer_delete(&conn->ev);
+       FR_TIMER_DISARM(conn->ev);
 
        /*
         *      If there's a close callback, call it, so that the
@@ -774,7 +774,7 @@ static void connection_state_enter_failed(connection_t *conn)
        /*
         *      Explicit error occurred, delete the connection timer
         */
-       fr_timer_delete(&conn->ev);
+       FR_TIMER_DISARM(conn->ev);
 
        /*
         *      Record what state the connection is currently in
@@ -924,7 +924,7 @@ static void connection_state_enter_halted(connection_t *conn)
                BAD_STATE_TRANSITION(CONNECTION_STATE_HALTED);
        }
 
-       fr_timer_delete(&conn->ev);
+       FR_TIMER_DISARM(conn->ev);
 
        STATE_TRANSITION(CONNECTION_STATE_HALTED);
        WATCH_PRE(conn);
@@ -952,7 +952,7 @@ static void connection_state_enter_connected(connection_t *conn)
 
        STATE_TRANSITION(CONNECTION_STATE_CONNECTED);
 
-       fr_timer_delete(&conn->ev);
+       FR_TIMER_DISARM(conn->ev);
        WATCH_PRE(conn);
        if (conn->open) {
                HANDLER_BEGIN(conn, conn->open);
@@ -1453,7 +1453,9 @@ static int _connection_free(connection_t *conn)
        /*
         *      Explicitly cancel any pending events
         */
-       fr_timer_delete(&conn->ev);
+       if (!fr_cond_assert_msg(fr_timer_delete(&conn->ev) == 0, "failed deleting connection timer")) {
+               return -1;
+       }
 
        /*
         *      Don't allow the connection to be
index 8633716a02169ceceab5a31620afa43580644ed1..23b020ffd837224e65e81dc21802c582f2846d22 100644 (file)
@@ -715,7 +715,7 @@ void fr_exec_oneshot_cleanup(fr_exec_state_t *exec, int signal)
                exec->pid = -1;
        }
 
-       if (exec->ev) fr_timer_delete(&exec->ev);
+       FR_TIMER_DELETE(&exec->ev);
 }
 
 /*
@@ -769,7 +769,7 @@ static void exec_reap(fr_event_list_t *el, pid_t pid, int status, void *uctx)
        }
        exec->pid = -1; /* pid_t is signed */
 
-       if (exec->ev) fr_timer_delete(&exec->ev);
+       FR_TIMER_DELETE(&exec->ev);
 
        /*
         *      Process exit notifications (EV_PROC) and file
@@ -936,7 +936,7 @@ static void exec_stdout_read(UNUSED fr_event_list_t *el, int fd, int flags, void
                        /*
                         *      Child has already exited - unlang can resume
                         */
-                       if (exec->ev) fr_timer_delete(&exec->ev);
+                       FR_TIMER_DELETE(&exec->ev);
                        unlang_interpret_mark_runnable(exec->request);
                }
        }
index ae8355cdf0f3ffd8ab138d582dc5a7c57f6a77d1..5ac0235a0241dec31018cc97df49406ce488a9bb 100644 (file)
@@ -219,7 +219,7 @@ int main_loop_start(void)
                if (under_systemd) {
                        INFO("Informing systemd we're stopping");
                        sd_notify(0, "STOPPING=1");
-                       fr_timer_delete(&sd_watchdog_ev);
+                       FR_TIMER_DELETE(&sd_watchdog_ev);
                }
        }
 #endif
index f0a82804755ff0613b98a10e0e9187fedbfebc99..b562000f87442ae6435a42fb64276a837ec98b25 100644 (file)
@@ -37,6 +37,7 @@ typedef struct trunk_s trunk_t;
 #include <freeradius-devel/server/trunk.h>
 
 #include <freeradius-devel/server/trigger.h>
+#include <freeradius-devel/util/debug.h>
 #include <freeradius-devel/util/misc.h>
 #include <freeradius-devel/util/syserror.h>
 #include <freeradius-devel/util/minmax_heap.h>
@@ -3211,7 +3212,7 @@ static void trunk_connection_enter_draining_to_free(trunk_connection_t *tconn)
 {
        trunk_t         *trunk = tconn->pub.trunk;
 
-       if (tconn->lifetime_ev) fr_timer_delete(&tconn->lifetime_ev);
+       FR_TIMER_DISARM(tconn->lifetime_ev);
 
        switch (tconn->pub.state) {
        case TRUNK_CONN_ACTIVE:
@@ -3560,7 +3561,7 @@ static void _trunk_connection_on_closed(UNUSED connection_t *conn,
        /*
         *      Remove the reconnect event
         */
-       if (fr_time_delta_ispos(trunk->conf.lifetime)) fr_timer_delete(&tconn->lifetime_ev);
+       if (fr_time_delta_ispos(trunk->conf.lifetime)) FR_TIMER_DELETE(&tconn->lifetime_ev);
 
        /*
         *      Remove the I/O events
@@ -4872,7 +4873,9 @@ static int _trunk_free(trunk_t *trunk)
         *      We really don't want this firing after
         *      we've freed everything.
         */
-       fr_timer_delete(&trunk->manage_ev);
+       if (!fr_cond_assert_msg(fr_timer_delete(&trunk->manage_ev) == 0, "failed deleting trunk management event")) {
+               return -1;
+       }
 
        /*
         *      Now free the connections in each of the lists.
index ab7204a8de0dac7437729d7e629624f093ecb0d7..29daa3a71dc50d8ed7a37ab9007417eaa6c3997b 100644 (file)
@@ -29,6 +29,7 @@ RCSID("$Id$")
 
 #include <ctype.h>
 #include <freeradius-devel/unlang/xlat_priv.h>
+#include <freeradius-devel/util/debug.h>
 #include "unlang_priv.h"       /* Fixme - Should create a proper semi-public interface for the interpret */
 
 /** State of an xlat expansion
@@ -95,9 +96,8 @@ typedef struct {
  */
 static int _unlang_xlat_event_free(unlang_xlat_event_t *ev)
 {
-       if (ev->ev) {
-               (void) fr_timer_delete(&(ev->ev));
-               return 0;
+       if (!fr_cond_assert_msg(fr_timer_delete(&(ev->ev)) == 0, "failed freeing xlat event timer")) {
+               return -1;
        }
 
        if (ev->fd >= 0) {
@@ -161,9 +161,7 @@ int unlang_xlat_timeout_add(request_t *request,
 
        if (!state->event_ctx) MEM(state->event_ctx = talloc_zero(state, bool));
 
-       ev = talloc_zero(state->event_ctx, unlang_xlat_event_t);
-       if (unlikely(!ev)) return -1;
-
+       MEM(ev = talloc_zero(state->event_ctx, unlang_xlat_event_t));
        ev->request = request;
        ev->fd = -1;
        ev->timeout = callback;
@@ -599,7 +597,9 @@ xlat_action_t unlang_xlat_yield(request_t *request,
  */
 static int _unlang_xlat_retry_free(unlang_xlat_retry_t *ev)
 {
-       if (ev->ev) (void) fr_timer_delete(&(ev->ev));
+       if (!fr_cond_assert_msg(fr_timer_delete(&(ev->ev)) == 0, "failed to deleting xlat retry timer")) {
+               return -1;
+       }
 
        return 0;
 }
@@ -702,8 +702,7 @@ xlat_action_t unlang_xlat_yield_to_retry(request_t *request, xlat_func_t resume,
 
        if (!state->event_ctx) MEM(state->event_ctx = talloc_zero(state, bool));
 
-       ev = talloc_zero(state->event_ctx, unlang_xlat_retry_t);
-       if (unlikely(!ev)) return XLAT_ACTION_FAIL;
+       MEM(ev = talloc_zero(state->event_ctx, unlang_xlat_retry_t));
 
        ev->request = request;
        fr_assert(state->exp->type == XLAT_FUNC);
index 82aafc7084c650c52db495b37d8765295b3e5ad6..a540eaf9e86b8f57697b50aea59d46ee01e84f1e 100644 (file)
@@ -87,8 +87,22 @@ int                  _fr_timer_in(NDEBUG_LOCATION_ARGS
 
 int                    fr_timer_disarm(fr_timer_t *ev);                        /* disarms but does not free */
 
+#define                        FR_TIMER_DISARM(_ev) \
+                       do { \
+                               if (likely((_ev) != NULL) && unlikely(fr_timer_disarm(_ev) < 0)) { \
+                                       fr_assert_msg(0, "Failed to disarm timer %p", (_ev)); \
+                               } \
+                       } while (0)
+
 int                    fr_timer_delete(fr_timer_t **ev_p) CC_HINT(nonnull);    /* disarms AND frees */
 
+#define                        FR_TIMER_DELETE(_ev_p) \
+                       do { \
+                               if ((likely((*(_ev_p)) != NULL) && unlikely(fr_timer_delete(_ev_p) < 0))) { \
+                                       fr_assert_msg(0, "Failed to delete timer %p", (_ev_p)); \
+                               } \
+                       } while (0)
+
 fr_time_t              fr_timer_when(fr_timer_t *ev) CC_HINT(nonnull);
 
 bool                   _fr_timer_armed(fr_timer_t *ev);
index e586c987d4dcf7b8cd95be3f4990d617fbddf446..2c8a0a4a7264f533e879498d5896d9f7f6c4a9c0 100644 (file)
@@ -817,7 +817,7 @@ static void bfd_start_packets(bfd_session_t *session)
        /*
         *      Reset the timers.
         */
-       fr_timer_delete(&session->ev_packet);
+       FR_TIMER_DISARM(session->ev_packet);
 
        if (fr_time_delta_cmp(session->desired_min_tx_interval, session->remote_min_rx_interval) >= 0) {
                interval = fr_time_delta_unwrap(session->desired_min_tx_interval);
@@ -990,8 +990,6 @@ static void bfd_set_timeout(bfd_session_t *session, fr_time_t when)
        uint64_t delay;
        fr_time_delta_t delta;
 
-       fr_timer_delete(&session->ev_timeout);
-
        delay = fr_time_delta_unwrap(session->detection_time);
        delay *= session->detect_multi;
 
@@ -1012,8 +1010,8 @@ static void bfd_set_timeout(bfd_session_t *session, fr_time_t when)
  */
 static int bfd_stop_control(bfd_session_t *session)
 {
-       fr_timer_delete(&session->ev_timeout);
-       fr_timer_delete(&session->ev_packet);
+       FR_TIMER_DISARM(session->ev_timeout);
+       FR_TIMER_DISARM(session->ev_packet);
        return 1;
 }
 
index 2a32a0d99b8398f11541ff657b5827e0c5205510..6dbe41137621bcdf354e647bd7fcef5ec74f949c 100644 (file)
@@ -122,7 +122,7 @@ static void mod_vnode_extend(fr_listen_t *li, UNUSED uint32_t fflags)
 
        if (has_worker) return;
 
-       if (thread->ev) fr_timer_delete(&thread->ev);
+       FR_TIMER_DISARM(thread->ev);
 
        work_init(thread, false);
 }
index 53cc19f4157b770956a2f8e5a2654c2ef52f2935..9e19e533702ddd569a5d6761ebb58c6b402d40dd 100644 (file)
@@ -232,7 +232,7 @@ static void status_check_reset(bio_handle_t *h, bio_request_t *u)
        u->num_replies = 0;     /* Reset */
        u->retry.start = fr_time_wrap(0);
 
-       if (u->ev) (void) fr_timer_delete(&u->ev);
+       FR_TIMER_DISARM(u->ev);
 
        bio_request_reset(u);
 }
@@ -613,7 +613,12 @@ static int _bio_handle_free(bio_handle_t *h)
 
        fr_assert(h->fd >= 0);
 
-       if (h->status_u) fr_timer_delete(&h->status_u->ev);
+       if (h->status_u) {
+               if (!fr_cond_assert_msg(fr_timer_delete(&h->status_u->ev) == 0,
+                                       "failed deleting status check timer")) {
+                       return -1;
+               }
+       }
 
        /*
         *      The connection code will take care of deleting the FD from the event loop.
@@ -874,13 +879,13 @@ static connection_state_t conn_failed(void *handle, connection_state_t state, UN
                /*
                 *      Reset the Status-Server checks.
                 */
-               if (h->status_u && h->status_u->ev) (void) fr_timer_delete(&h->status_u->ev);
-       }
+               if (h->status_u) FR_TIMER_DISARM(h->status_u->ev);
                break;
 
        default:
                break;
        }
+       }
 
        return CONNECTION_STATE_INIT;
 }
@@ -1335,7 +1340,7 @@ static bool check_for_zombie(fr_event_list_t *el, trunk_connection_t *tconn, fr_
        /*
         *      If we're status checking OR already zombie, don't go to zombie
         */
-       if (h->status_checking || h->zombie_ev) return true;
+       if (h->status_checking || fr_timer_armed(h->zombie_ev)) return true;
 
        if (fr_time_eq(now, fr_time_wrap(0))) now = fr_time();
 
@@ -2088,7 +2093,7 @@ static void request_cancel(UNUSED connection_t *conn, void *preq_to_reset,
                 *      queued for sendmmsg but never actually
                 *      sent.
                 */
-               if (u->ev) (void) fr_timer_delete(&u->ev);
+               FR_TIMER_DISARM(u->ev);
        }
 
        /*
@@ -2106,7 +2111,7 @@ static void request_conn_release(connection_t *conn, void *preq_to_reset, UNUSED
        bio_request_t           *u = preq_to_reset;
        bio_handle_t            *h = talloc_get_type_abort(conn->h, bio_handle_t);
 
-       if (u->ev) (void)fr_timer_delete(&u->ev);
+       FR_TIMER_DISARM(u->ev);
        bio_request_reset(u);
 
        if (h->ctx.inst->mode == RLM_RADIUS_MODE_REPLICATE) return;
@@ -2245,9 +2250,12 @@ static int _bio_request_free(bio_request_t *u)
        }
 #endif
 
-       fr_assert_msg(!u->ev, "bio_request_t freed with active timer");
+       fr_assert_msg(!fr_timer_armed(u->ev), "bio_request_t freed with active timer");
 
-       if (u->ev) (void) fr_timer_delete(&u->ev);
+       if (!fr_cond_assert_msg(fr_timer_delete(&u->ev) == 0,
+                               "failed deleting request timer")) {
+               return -1;
+       }
 
        fr_assert(u->rr == NULL);
 
index 848cce7067c583d6e848490cf5e24310d6f1f524..162e4e5e4d218390e549fe11bafd52a326f8418c 100644 (file)
@@ -565,8 +565,8 @@ static void sql_trunk_connection_notify(UNUSED trunk_connection_t *tconn, connec
 
        switch (notify_on) {
        case TRUNK_CONN_EVENT_NONE:
-               if (c->read_ev) fr_timer_delete(&c->read_ev);
-               if (c->write_ev) fr_timer_delete(&c->write_ev);
+               FR_TIMER_DISARM(c->read_ev);
+               FR_TIMER_DISARM(c->write_ev);
                return;
 
        case TRUNK_CONN_EVENT_BOTH:
index d047f928e7c370ab533ef5f9b45b8a8f98ed7c62..e8edfc5996a1fe717710825e7742c230d8b408e4 100644 (file)
@@ -543,8 +543,8 @@ static void sql_trunk_connection_notify(UNUSED trunk_connection_t *tconn, connec
        uint                    poll_interval = (query_ctx && query_ctx->type != SQL_QUERY_SELECT) ? c->query_interval : c->select_interval;
        switch (notify_on) {
        case TRUNK_CONN_EVENT_NONE:
-               if (c->read_ev) fr_timer_delete(&c->read_ev);
-               if (c->write_ev) fr_timer_delete(&c->write_ev);
+               FR_TIMER_DISARM(c->read_ev);
+               FR_TIMER_DISARM(c->write_ev);
                return;
 
        case TRUNK_CONN_EVENT_BOTH:
index 91f9276d6f8a9cf58a6b9330b119516ac9352368..74479171b46159d969b5f254c9586de4ac7ec0a2 100644 (file)
@@ -114,9 +114,6 @@ static void _sql_connection_close(UNUSED fr_event_list_t *el, void *h, UNUSED vo
 {
        rlm_sql_unixodbc_conn_t *c = talloc_get_type_abort(h, rlm_sql_unixodbc_conn_t);
 
-       if (c->read_ev) fr_timer_delete(&c->read_ev);
-       if (c->write_ev) fr_timer_delete(&c->write_ev);
-
        if (c->stmt) SQLFreeHandle(SQL_HANDLE_STMT, c->stmt);
 
        if (c->dbc) {
@@ -457,8 +454,8 @@ static void sql_trunk_connection_notify(UNUSED trunk_connection_t *tconn, connec
        uint                    poll_interval = (query_ctx && query_ctx->type != SQL_QUERY_SELECT) ? c->query_interval : c->select_interval;
        switch (notify_on) {
        case TRUNK_CONN_EVENT_NONE:
-               if (c->read_ev) fr_timer_delete(&c->read_ev);
-               if (c->write_ev) fr_timer_delete(&c->write_ev);
+               FR_TIMER_DISARM(c->read_ev);
+               FR_TIMER_DISARM(c->write_ev);
                return;
 
        case TRUNK_CONN_EVENT_BOTH:
index e4741f8621d0f24b4e17fb64f614985f19307149..453e1f67f9041b416082e7606fe95d5b6421a603 100644 (file)
@@ -211,7 +211,7 @@ static void udp_request_reset(udp_handle_t *h, udp_request_t *u)
        u->outstanding = false;
        h->active--;
 
-       if (u->ev) (void)fr_timer_delete(&u->ev);
+       FR_TIMER_DISARM(u->ev);
 
        /*
         *      We've sent 255 packets, and received all replies.  Shut the connection down.
index c660eb86b1e5ed031c7bd671af9ffc3978d0d75d..cf691c2a9146bc5bcca2c00d77607a46b2c55086 100644 (file)
@@ -27,6 +27,7 @@ RCSID("$Id$")
 #define LOG_PREFIX "unbound"
 
 #include <freeradius-devel/server/log.h>
+#include <freeradius-devel/util/debug.h>
 #include <freeradius-devel/util/event.h>
 #include <freeradius-devel/util/syserror.h>
 
@@ -232,9 +233,7 @@ static void _unbound_io_service_errored(UNUSED fr_event_list_t *el,
         *      that it fired.  This is imperfect but unbound
         *      doesn't have a callback for receiving errors.
         */
-       if (fr_timer_delete(&ev->timer) < 0) {
-               PERROR("ubound event %p - Failed disarming timeout", ev);
-       }
+       FR_TIMER_DISARM(ev->timer);
 
        ev->cb(-1, UB_EV_TIMEOUT, ev->uctx);    /* Call libunbound - pretend this is a timeout */
 }
@@ -347,9 +346,7 @@ static int _unbound_io_event_deactivate(struct ub_event *ub_ev)
        if (ev->events & UB_EV_TIMEOUT) {
                DEBUG4("unbound event %p - Disarming timeout", ev);
 
-               if (ev->timer && (fr_timer_delete(&ev->timer) < 0)) {
-                       PERROR("ubound event %p - Failed disarming timeout", ev);
-
+               if (!fr_cond_assert_msg(fr_timer_disarm(ev->timer) == 0, "failed disarming timeout")) {
                        ret = -1;
                }
        }
@@ -382,9 +379,7 @@ static int _unbound_io_timer_modify(struct ub_event *ub_ev, UNUSED struct ub_eve
                       ev, uctx, ev->uctx);
                ev->uctx = uctx;
        }
-       if (ev->timer && (fr_timer_delete(&ev->timer) < 0)) {
-               PERROR("ubound event %p - Failed disarming timeout", ev);
-
+       if (!fr_cond_assert_msg(fr_timer_disarm(ev->timer) == 0, "ubound event %p - Failed disarming timeout", ev)) {
                ret = -1;       /* Continue ? */
        }
 
@@ -414,11 +409,7 @@ static int _unbound_io_timer_deactivate(struct ub_event *ub_ev)
 
        DEBUG4("unbound event %p - Disarming timeout", ev);
 
-       if (ev->timer && (fr_timer_delete(&ev->timer) < 0)) {
-               PERROR("unbound event %p - Failed disarming timeout", ev);
-
-               return -1;
-       }
+       if (!fr_cond_assert_msg(fr_timer_disarm(ev->timer) == 0, "failed disarming timeout")) return -1;
 
        return 0;
 }
index 349490be6018e76b88121fe86a367f196514e8c7..187d62e7c00af55bd4587ff9231c9dce584b1b8f 100644 (file)
@@ -115,7 +115,7 @@ static void xlat_unbound_callback(void *mydata, int rcode, void *packet, int pac
         *      Request has completed remove timeout event and set
         *      async_id to 0 so ub_cancel() is not called when ur is freed
         */
-       if (ur->ev) (void)fr_timer_delete(&ur->ev);
+       FR_TIMER_DISARM(ur->ev);
        ur->async_id = 0;
 
        /*
@@ -274,7 +274,7 @@ static void xlat_unbound_signal(xlat_ctx_t const *xctx, request_t *request, UNUS
 {
        unbound_request_t       *ur = talloc_get_type_abort(xctx->rctx, unbound_request_t);
 
-       if (ur->ev) (void)fr_timer_delete(&ur->ev);
+       FR_TIMER_DISARM(ur->ev);
 
        RDEBUG2("Forcefully cancelling pending unbound request");
 }