fr_curl_handle_t *mhandle = talloc_get_type_abort(ctx, fr_curl_handle_t);
if (timeout_ms < 0) {
- if (!fr_cond_assert_msg(fr_timer_disarm(mhandle->ev) == 0, "Failed disarming curl timer")) return -1;
+ FR_TIMER_DISARM_RETURN(mhandle->ev);
DEBUG3("multi-handle %p - Timer removed", mandle);
return 0;
}
{
if (!fr_timer_armed(l->ev)) return 0;
- return fr_timer_delete(&l->ev);
+ FR_TIMER_DELETE_RETURN(&l->ev);
+ return 0;
}
static int track_free(fr_io_track_t *track)
{
- if (fr_cond_assert_msg(fr_timer_delete(&track->ev) == 0, "failed deleting tracking timer")) return -1;
+ FR_TIMER_DELETE_RETURN(&track->ev);
talloc_free_children(track);
fr_assert(track->client->packets > 0);
* want to clean it up.
*/
if (fr_timer_armed(client->ev)) {
- if (fr_cond_assert_msg(fr_timer_delete(&client->ev) == 0,
- "failed deleting client timer")) {
- return -1;
- }
+ FR_TIMER_DELETE_RETURN(&client->ev);
client->ready_to_delete = false;
}
/*
* Explicitly cancel any pending events
*/
- if (!fr_cond_assert_msg(fr_timer_delete(&conn->ev) == 0, "failed deleting connection timer")) {
- return -1;
- }
-
+ FR_TIMER_DELETE_RETURN(&conn->ev);
/*
* Don't allow the connection to be
* arbitrarily freed by a callback.
* We really don't want this firing after
* we've freed everything.
*/
- if (!fr_cond_assert_msg(fr_timer_delete(&trunk->manage_ev) == 0, "failed deleting trunk management event")) {
- return -1;
- }
+ FR_TIMER_DELETE_RETURN(&trunk->manage_ev);
/*
* Now free the connections in each of the lists.
*/
static int _unlang_xlat_event_free(unlang_xlat_event_t *ev)
{
- if (!fr_cond_assert_msg(fr_timer_delete(&(ev->ev)) == 0, "failed freeing xlat event timer")) {
- return -1;
- }
+ FR_TIMER_DELETE(&(ev->ev));
if (ev->fd >= 0) {
(void) fr_event_fd_delete(unlang_interpret_event_list(ev->request), ev->fd, FR_EVENT_FILTER_IO);
*/
static int _unlang_xlat_retry_free(unlang_xlat_retry_t *ev)
{
- if (!fr_cond_assert_msg(fr_timer_delete(&(ev->ev)) == 0, "failed to deleting xlat retry timer")) {
- return -1;
- }
+ FR_TIMER_DELETE(&(ev->ev));
return 0;
}
/*
* Disables the timer in the parent, does not free the memory
*/
- if (tl->parent) if (unlikely(fr_timer_disarm(tl->parent_ev) < 0)) return -1;
+ if (tl->parent) FR_TIMER_DISARM_RETURN(tl->parent_ev);
return 0;
}
return -1;
}
- if (tl->parent_ev) fr_timer_delete(&tl->parent_ev);
+ if (tl->parent_ev) if (unlikely(fr_timer_delete(&tl->parent_ev) < 0)) return -1;
while ((ev = timer_funcs[tl->type].head(tl))) {
if (talloc_free(ev) < 0) return -1;
} \
} while (0)
+#define FR_TIMER_DISARM_RETURN(_ev) \
+ if ((likely(((_ev)) != NULL) && unlikely(!fr_cond_assert_msg(fr_timer_disarm(_ev) == 0, "Failed to disarm timer %p", (_ev))))) return -1;
+
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)); \
+ fr_assert_msg(0, "Failed to delete timer %p", *(_ev_p)); \
} \
} while (0)
+#define FR_TIMER_DELETE_RETURN(_ev_p) \
+ if ((likely((*(_ev_p)) != NULL) && unlikely(!fr_cond_assert_msg(fr_timer_delete(_ev_p) == 0, "Failed to delete timer %p", *(_ev_p))))) return -1;
+
fr_time_t fr_timer_when(fr_timer_t *ev) CC_HINT(nonnull);
bool _fr_timer_armed(fr_timer_t *ev);
fr_assert(h->fd >= 0);
- if (h->status_u) {
- if (!fr_cond_assert_msg(fr_timer_delete(&h->status_u->ev) == 0,
- "failed deleting status check timer")) {
- return -1;
- }
- }
+ if (h->status_u) FR_TIMER_DELETE_RETURN(&h->status_u->ev);
/*
* The connection code will take care of deleting the FD from the event loop.
fr_assert_msg(!fr_timer_armed(u->ev), "bio_request_t freed with active timer");
- if (!fr_cond_assert_msg(fr_timer_delete(&u->ev) == 0,
- "failed deleting request timer")) {
- return -1;
- }
+ FR_TIMER_DELETE_RETURN(&u->ev);
fr_assert(u->rr == NULL);
if (ev->events & UB_EV_TIMEOUT) {
DEBUG4("unbound event %p - Disarming timeout", ev);
- if (!fr_cond_assert_msg(fr_timer_disarm(ev->timer_ev) == 0, "failed disarming timeout")) {
- ret = -1;
- }
+ FR_TIMER_DISARM_RETURN(ev->timer_ev);
}
ev->active = false; /* Event is now inactive and can be modified */
ev, uctx, ev->uctx);
ev->uctx = uctx;
}
- if (!fr_cond_assert_msg(fr_timer_disarm(ev->timer_ev) == 0, "ubound event %p - Failed disarming timeout", ev)) {
- ret = -1; /* Continue ? */
- }
+ FR_TIMER_DISARM_RETURN(ev->timer_ev);
timeout = fr_time_delta_from_timeval(tv);
DEBUG4("unbound event %p - Disarming timeout", ev);
- if (!fr_cond_assert_msg(fr_timer_disarm(ev->timer_ev) == 0, "failed disarming timeout")) return -1;
+ FR_TIMER_DISARM_RETURN(ev->timer_ev);
return 0;
}