Skip to content

Commit a954662

Browse files
extract zend_mm_observer_find_heap_observer
1 parent 285563a commit a954662

File tree

2 files changed

+29
-34
lines changed

2 files changed

+29
-34
lines changed

Zend/zend_alloc.c

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3230,63 +3230,57 @@ void zend_mm_observer_sync_flag(bool enabled_observer) {
32303230
#endif
32313231
}
32323232

3233-
ZEND_API bool zend_mm_observer_enabled(zend_mm_heap *heap, zend_mm_observer *node) {
3234-
#if ZEND_MM_CUSTOM
3233+
zend_mm_heap_observer* zend_mm_observer_find_heap_observer(zend_mm_heap *heap, zend_mm_observer *node) {
32353234
if (heap == NULL) {
32363235
heap = AG(mm_heap);
32373236
if (heap == NULL) {
3238-
return false;
3237+
return NULL;
32393238
}
32403239
}
32413240
zend_mm_heap_observer *current = heap->observers;
32423241
while (current != NULL) {
32433242
if (current->observer == node) {
3244-
return current->enabled;
3243+
return current;
32453244
}
32463245
current = current->next;
32473246
}
3247+
return NULL;
3248+
}
3249+
3250+
ZEND_API bool zend_mm_observer_enabled(zend_mm_heap *heap, zend_mm_observer *node) {
3251+
#if ZEND_MM_CUSTOM
3252+
zend_mm_heap_observer *heap_observer = zend_mm_observer_find_heap_observer(heap, node);
3253+
if (heap_observer == NULL) {
3254+
return false;
3255+
}
3256+
return heap_observer->enabled;
32483257
#endif
32493258
return false;
32503259
}
32513260

3252-
ZEND_API bool zend_mm_observer_enable(zend_mm_heap *heap, zend_mm_observer *node) {
3261+
ZEND_API bool zend_mm_observer_set_state(zend_mm_heap *heap, zend_mm_observer *node, bool state) {
32533262
#if ZEND_MM_CUSTOM
3254-
if (heap == NULL) {
3255-
heap = AG(mm_heap);
3256-
if (heap == NULL) {
3257-
return false;
3258-
}
3259-
}
3260-
zend_mm_heap_observer *current = heap->observers;
3261-
while (current != NULL) {
3262-
if (current->observer == node) {
3263-
current->enabled = true;
3264-
zend_mm_observer_sync_flag(true);
3265-
return true;
3266-
}
3267-
current = current->next;
3263+
zend_mm_heap_observer *heap_observer = zend_mm_observer_find_heap_observer(heap, node);
3264+
if (heap_observer == NULL) {
3265+
false;
32683266
}
3267+
heap_observer->enabled = state;
3268+
zend_mm_observer_sync_flag(state);
3269+
return true;
3270+
#endif
3271+
return false;
3272+
}
3273+
3274+
ZEND_API bool zend_mm_observer_enable(zend_mm_heap *heap, zend_mm_observer *node) {
3275+
#if ZEND_MM_CUSTOM
3276+
return zend_mm_observer_set_state(heap, node, true);
32693277
#endif
32703278
return false;
32713279
}
32723280

32733281
ZEND_API bool zend_mm_observer_disable(zend_mm_heap *heap, zend_mm_observer *node) {
32743282
#if ZEND_MM_CUSTOM
3275-
if (heap == NULL) {
3276-
heap = AG(mm_heap);
3277-
if (heap == NULL) {
3278-
return false;
3279-
}
3280-
}
3281-
zend_mm_heap_observer *current = heap->observers;
3282-
while (current != NULL) {
3283-
if (current->observer == node) {
3284-
current->enabled = false;
3285-
zend_mm_observer_sync_flag(false);
3286-
return true;
3287-
}
3288-
current = current->next;
3289-
}
3283+
return zend_mm_observer_set_state(heap, node, false);
32903284
#endif
32913285
return false;
32923286
}

Zend/zend_alloc.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ void zend_mm_observers_unregister(void);
296296

297297
// thread local
298298
ZEND_API bool zend_mm_observer_enabled(zend_mm_heap*, zend_mm_observer*);
299+
ZEND_API bool zend_mm_observer_set_state(zend_mm_heap *heap, zend_mm_observer *node, bool state);
299300
ZEND_API bool zend_mm_observer_enable(zend_mm_heap*, zend_mm_observer*);
300301
ZEND_API bool zend_mm_observer_disable(zend_mm_heap*, zend_mm_observer*);
301302

0 commit comments

Comments
 (0)