summaryrefslogtreecommitdiff
path: root/thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'thread.c')
-rw-r--r--thread.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/thread.c b/thread.c
index d199a39645..8fc6dd9245 100644
--- a/thread.c
+++ b/thread.c
@@ -2757,9 +2757,10 @@ rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data)
static int
remove_event_hook(rb_event_hook_t **root, rb_event_hook_func_t func)
{
- rb_event_hook_t *prev = NULL, *hook = *root;
+ rb_event_hook_t *prev = NULL, *hook = *root, *next;
while (hook) {
+ next = hook->next;
if (func == 0 || hook->func == func) {
if (prev) {
prev->next = hook->next;
@@ -2769,8 +2770,10 @@ remove_event_hook(rb_event_hook_t **root, rb_event_hook_func_t func)
}
xfree(hook);
}
- prev = hook;
- hook = hook->next;
+ else {
+ prev = hook;
+ }
+ hook = next;
}
return -1;
}