]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
remove from ev_to_add on free, if necessary
authorAlan T. DeKok <aland@freeradius.org>
Fri, 14 Feb 2020 21:05:45 +0000 (16:05 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 14 Feb 2020 21:06:07 +0000 (16:06 -0500)
src/lib/util/event.c

index 7103e8058557c891ae5db2b6b02e1ae6e59ac0d3..5580aa1c5a6f310ba1696c885abac9091cea9ea8 100644 (file)
@@ -993,7 +993,23 @@ static int _event_timer_free(fr_event_timer_t *ev)
        fr_event_timer_t const **ev_p;
        int             ret;
 
-       ret = fr_heap_extract(el->times, ev);
+       if (el->in_handler) {
+               fr_event_timer_t **tmp_p;
+
+               ret = -1;
+
+               for (tmp_p = &el->ev_to_add;
+                    *tmp_p != NULL;
+                    tmp_p = &((*tmp_p)->next)) {
+                       if (*tmp_p == ev) {
+                               *tmp_p = ev->next;
+                               ret = 0;
+                               break;
+                       }
+               }
+       } else {
+               ret = fr_heap_extract(el->times, ev);
+       }
 
        ev_p = ev->parent;
        rad_assert(*(ev->parent) == ev);