Zero out freed timers and light sources

This commit is contained in:
Pasi Kallinen
2024-05-06 19:17:07 +03:00
parent 1a58ed8de9
commit dba37fa768
2 changed files with 7 additions and 0 deletions

View File

@@ -148,6 +148,7 @@ delete_ls(light_source *ls)
}
if (curr) {
assert(curr == ls);
(void) memset((genericptr_t) ls, 0, sizeof(light_source));
free((genericptr_t) ls);
gv.vision_full_recalc = 1;
} else {
@@ -433,6 +434,7 @@ save_light_sources(NHFILE *nhfp, int range)
/* if global and not doing local, or vice versa, remove it */
if (is_global ^ (range == RANGE_LEVEL)) {
*prev = curr->next;
(void) memset((genericptr_t) curr, 0, sizeof(light_source));
free((genericptr_t) curr);
} else {
prev = &(*prev)->next;

View File

@@ -2162,6 +2162,7 @@ run_timers(void)
if (curr->kind == TIMER_OBJECT)
(curr->arg.a_obj)->timed--;
(*timeout_funcs[curr->func_index].f)(&curr->arg, curr->timeout);
(void) memset((genericptr_t) curr, 0, sizeof(timer_element));
free((genericptr_t) curr);
}
}
@@ -2236,6 +2237,7 @@ stop_timer(short func_index, anything *arg)
(arg->a_obj)->timed--;
if ((cleanup_func = timeout_funcs[doomed->func_index].cleanup) != 0)
(*cleanup_func)(arg, timeout);
(void) memset((genericptr_t) doomed, 0, sizeof(timer_element));
free((genericptr_t) doomed);
return (timeout - gm.moves);
}
@@ -2313,6 +2315,7 @@ obj_stop_timers(struct obj *obj)
gt.timer_base = curr->next;
if ((cleanup_func = timeout_funcs[curr->func_index].cleanup) != 0)
(*cleanup_func)(&curr->arg, curr->timeout);
(void) memset((genericptr_t) curr, 0, sizeof(timer_element));
free((genericptr_t) curr);
} else {
prev = curr;
@@ -2353,6 +2356,7 @@ spot_stop_timers(coordxy x, coordxy y, short func_index)
gt.timer_base = curr->next;
if ((cleanup_func = timeout_funcs[curr->func_index].cleanup) != 0)
(*cleanup_func)(&curr->arg, curr->timeout);
(void) memset((genericptr_t) curr, 0, sizeof(timer_element));
free((genericptr_t) curr);
} else {
prev = curr;
@@ -2618,6 +2622,7 @@ save_timers(NHFILE *nhfp, int range)
prev->next = curr->next;
else
gt.timer_base = curr->next;
(void) memset((genericptr_t) curr, 0, sizeof(timer_element));
free((genericptr_t) curr);
/* prev stays the same */
} else {