Skip to content

Commit fb65a9c

Browse files
cleanup unregister
1 parent baafc33 commit fb65a9c

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

Zend/zend_alloc.c

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3139,16 +3139,7 @@ ZEND_API bool zend_mm_observer_unregister(zend_mm_heap *heap, zend_mm_observer *
31393139

31403140
zend_mm_observer *current = heap->observers, *prev = NULL;
31413141

3142-
if (current == observer) {
3143-
heap->observers = observer->next;
3144-
pefree(observer, 1);
3145-
if (!heap->observers) {
3146-
// this was the one and only installed observer
3147-
heap->use_custom_heap &= ~ZEND_MM_CUSTOM_HEAP_OBSERVED;
3148-
}
3149-
return true;
3150-
}
3151-
3142+
// find the given observer in the list of observers
31523143
while (current != NULL && current != observer) {
31533144
prev = current;
31543145
current = current->next;
@@ -3159,7 +3150,18 @@ ZEND_API bool zend_mm_observer_unregister(zend_mm_heap *heap, zend_mm_observer *
31593150
return false;
31603151
}
31613152

3162-
prev->next = current->next;
3153+
if (prev == NULL) {
3154+
// current observer is the first in the list
3155+
heap->observers = current->next;
3156+
if (!heap->observers) {
3157+
// and current was also the last in the list, so no more observers
3158+
// left
3159+
heap->use_custom_heap &= ~ZEND_MM_CUSTOM_HEAP_OBSERVED;
3160+
}
3161+
} else {
3162+
prev->next = current->next;
3163+
}
3164+
31633165
pefree(observer, 1);
31643166
return true;
31653167
#else

0 commit comments

Comments
 (0)