summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vm_method.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/vm_method.c b/vm_method.c
index 6d0865f9d8..b4c45180d6 100644
--- a/vm_method.c
+++ b/vm_method.c
@@ -122,26 +122,20 @@ void
rb_sweep_method_entry(void *pvm)
{
rb_vm_t *vm = pvm;
- struct unlinked_method_entry_list_entry *ume = vm->unlinked_method_entry_list, *prev_ume = 0, *curr_ume;
+ struct unlinked_method_entry_list_entry **prev_ume = &vm->unlinked_method_entry_list, *ume = *prev_ume, *curr_ume;
while (ume) {
if (ume->me->mark) {
ume->me->mark = 0;
- prev_ume = ume;
- ume = ume->next;
+ prev_ume = &ume->next;
+ ume = *prev_ume;
}
else {
rb_free_method_entry(ume->me);
- if (prev_ume == 0) {
- vm->unlinked_method_entry_list = ume->next;
- }
- else {
- prev_ume->next = ume->next;
- }
-
curr_ume = ume;
ume = ume->next;
+ *prev_ume = ume;
xfree(curr_ume);
}
}