Lines Matching refs:ref

95 # define GC_TRACE_REF(ref, format, ...) \  argument
97 gc_trace_ref((zend_refcounted *) ref); \
100 # define GC_TRACE_SET_COLOR(ref, color) \ argument
101 GC_TRACE_REF(ref, "->%s", gc_color_name(color))
103 # define GC_TRACE_REF(ref, format, ...) argument
104 # define GC_TRACE_SET_COLOR(ref, new_color) argument
109 #define GC_REF_ADDRESS(ref) \ argument
110 (((GC_TYPE_INFO(ref)) & (GC_ADDRESS << GC_INFO_SHIFT)) >> GC_INFO_SHIFT)
112 #define GC_REF_COLOR(ref) \ argument
113 (((GC_TYPE_INFO(ref)) & (GC_COLOR << GC_INFO_SHIFT)) >> GC_INFO_SHIFT)
115 #define GC_REF_CHECK_COLOR(ref, color) \ argument
116 ((GC_TYPE_INFO(ref) & (GC_COLOR << GC_INFO_SHIFT)) == ((color) << GC_INFO_SHIFT))
118 #define GC_REF_SET_INFO(ref, info) do { \ argument
119 GC_TYPE_INFO(ref) = \
120 (GC_TYPE_INFO(ref) & (GC_TYPE_MASK | GC_FLAGS_MASK)) | \
124 #define GC_REF_SET_COLOR(ref, c) do { \ argument
125 GC_TRACE_SET_COLOR(ref, c); \
126 GC_TYPE_INFO(ref) = \
127 (GC_TYPE_INFO(ref) & ~(GC_COLOR << GC_INFO_SHIFT)) | \
131 #define GC_REF_SET_BLACK(ref) do { \ argument
132 GC_TRACE_SET_COLOR(ref, GC_BLACK); \
133 GC_TYPE_INFO(ref) &= ~(GC_COLOR << GC_INFO_SHIFT); \
136 #define GC_REF_SET_PURPLE(ref) do { \ argument
137 GC_TRACE_SET_COLOR(ref, GC_PURPLE); \
138 GC_TYPE_INFO(ref) |= (GC_COLOR << GC_INFO_SHIFT); \
243 zend_refcounted *ref; member
316 #define GC_STACK_PUSH(ref) \ argument
317 gc_stack_push(&_stack, &_top, ref);
333 static zend_always_inline void gc_stack_push(gc_stack **stack, size_t *top, zend_refcounted *ref) in gc_stack_push() argument
339 (*stack)->data[(*top)++] = ref; in gc_stack_push()
376 static zend_always_inline gc_root_buffer* gc_decompress(zend_refcounted *ref, uint32_t idx) in gc_decompress() argument
380 if (EXPECTED(GC_GET_PTR(root->ref) == ref)) { in gc_decompress()
388 if (GC_GET_PTR(root->ref) == ref) { in gc_decompress()
402 ZEND_ASSERT(GC_IS_UNUSED(root->ref)); in gc_fetch_unused()
403 GC_G(unused) = GC_LIST2IDX(root->ref); in gc_fetch_unused()
409 root->ref = GC_IDX2LIST(GC_G(unused)); in gc_link_unused()
433 static void gc_trace_ref(zend_refcounted *ref) { in gc_trace_ref() argument
434 if (GC_TYPE(ref) == IS_OBJECT) { in gc_trace_ref()
435 zend_object *obj = (zend_object *) ref; in gc_trace_ref()
437 ref, GC_REFCOUNT(ref), GC_REF_ADDRESS(ref), in gc_trace_ref()
438 gc_color_name(GC_REF_COLOR(ref)), in gc_trace_ref()
440 } else if (GC_TYPE(ref) == IS_ARRAY) { in gc_trace_ref()
441 zend_array *arr = (zend_array *) ref; in gc_trace_ref()
443 ref, GC_REFCOUNT(ref), GC_REF_ADDRESS(ref), in gc_trace_ref()
444 gc_color_name(GC_REF_COLOR(ref)), in gc_trace_ref()
448 ref, GC_REFCOUNT(ref), GC_REF_ADDRESS(ref), in gc_trace_ref()
449 gc_color_name(GC_REF_COLOR(ref)), in gc_trace_ref()
450 GC_TYPE(ref) == IS_REFERENCE in gc_trace_ref()
451 ? "reference" : zend_get_type_by_const(GC_TYPE(ref))); in gc_trace_ref()
554 GC_G(buf)[0].ref = NULL; in gc_enable()
634 static zend_never_inline void ZEND_FASTCALL gc_possible_root_when_full(zend_refcounted *ref) in gc_possible_root_when_full() argument
639 ZEND_ASSERT(GC_TYPE(ref) == IS_ARRAY || GC_TYPE(ref) == IS_OBJECT); in gc_possible_root_when_full()
640 ZEND_ASSERT(GC_INFO(ref) == 0); in gc_possible_root_when_full()
643 GC_ADDREF(ref); in gc_possible_root_when_full()
645 if (UNEXPECTED(GC_DELREF(ref) == 0)) { in gc_possible_root_when_full()
646 rc_dtor_func(ref); in gc_possible_root_when_full()
648 } else if (UNEXPECTED(GC_INFO(ref))) { in gc_possible_root_when_full()
666 newRoot->ref = ref; /* GC_ROOT tag is 0 */ in gc_possible_root_when_full()
667 GC_TRACE_SET_COLOR(ref, GC_PURPLE); in gc_possible_root_when_full()
670 GC_REF_SET_INFO(ref, idx | GC_PURPLE); in gc_possible_root_when_full()
678 ZEND_API void ZEND_FASTCALL gc_possible_root(zend_refcounted *ref) in gc_possible_root() argument
694 gc_possible_root_when_full(ref); in gc_possible_root()
698 ZEND_ASSERT(GC_TYPE(ref) == IS_ARRAY || GC_TYPE(ref) == IS_OBJECT); in gc_possible_root()
699 ZEND_ASSERT(GC_INFO(ref) == 0); in gc_possible_root()
702 newRoot->ref = ref; /* GC_ROOT tag is 0 */ in gc_possible_root()
703 GC_TRACE_SET_COLOR(ref, GC_PURPLE); in gc_possible_root()
706 GC_REF_SET_INFO(ref, idx | GC_PURPLE); in gc_possible_root()
714 static void ZEND_FASTCALL gc_extra_root(zend_refcounted *ref) in gc_extra_root() argument
732 ZEND_ASSERT(GC_TYPE(ref) == IS_ARRAY || GC_TYPE(ref) == IS_OBJECT); in gc_extra_root()
733 ZEND_ASSERT(GC_REF_ADDRESS(ref) == 0); in gc_extra_root()
736 newRoot->ref = ref; /* GC_ROOT tag is 0 */ in gc_extra_root()
739 GC_REF_SET_INFO(ref, idx | GC_REF_COLOR(ref)); in gc_extra_root()
747 static zend_never_inline void ZEND_FASTCALL gc_remove_compressed(zend_refcounted *ref, uint32_t idx) in gc_remove_compressed() argument
749 gc_root_buffer *root = gc_decompress(ref, idx); in gc_remove_compressed()
753 ZEND_API void ZEND_FASTCALL gc_remove_from_buffer(zend_refcounted *ref) in gc_remove_from_buffer() argument
756 uint32_t idx = GC_REF_ADDRESS(ref); in gc_remove_from_buffer()
760 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_remove_from_buffer()
761 GC_TRACE_SET_COLOR(ref, GC_BLACK); in gc_remove_from_buffer()
763 GC_REF_SET_INFO(ref, 0); in gc_remove_from_buffer()
767 gc_remove_compressed(ref, idx); in gc_remove_from_buffer()
776 static void gc_scan_black(zend_refcounted *ref, gc_stack *stack) in gc_scan_black() argument
785 if (GC_TYPE(ref) == IS_OBJECT) { in gc_scan_black()
786 zend_object *obj = (zend_object*)ref; in gc_scan_black()
788 if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED))) { in gc_scan_black()
818 ref = Z_COUNTED_P(entry); in gc_scan_black()
819 GC_ADDREF(ref); in gc_scan_black()
820 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
821 GC_REF_SET_BLACK(ref); in gc_scan_black()
822 GC_STACK_PUSH(ref); in gc_scan_black()
855 ref = Z_COUNTED_P(entry); in gc_scan_black()
856 GC_ADDREF(ref); in gc_scan_black()
857 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
858 GC_REF_SET_BLACK(ref); in gc_scan_black()
859 GC_STACK_PUSH(ref); in gc_scan_black()
877 ref = Z_COUNTED_P(zv); in gc_scan_black()
878 GC_ADDREF(ref); in gc_scan_black()
879 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
880 GC_REF_SET_BLACK(ref); in gc_scan_black()
881 GC_STACK_PUSH(ref); in gc_scan_black()
893 ref = Z_COUNTED_P(zv); in gc_scan_black()
894 GC_ADDREF(ref); in gc_scan_black()
895 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
896 GC_REF_SET_BLACK(ref); in gc_scan_black()
900 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_scan_black() local
901 GC_ADDREF(ref); in gc_scan_black()
902 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
903 GC_REF_SET_BLACK(ref); in gc_scan_black()
904 GC_STACK_PUSH(ref); in gc_scan_black()
915 } else if (GC_TYPE(ref) == IS_ARRAY) { in gc_scan_black()
916 ZEND_ASSERT((zend_array*)ref != &EG(symbol_table)); in gc_scan_black()
917 ht = (zend_array*)ref; in gc_scan_black()
932 ref = Z_COUNTED_P(zv); in gc_scan_black()
933 GC_ADDREF(ref); in gc_scan_black()
934 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
935 GC_REF_SET_BLACK(ref); in gc_scan_black()
943 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_scan_black() local
944 GC_ADDREF(ref); in gc_scan_black()
945 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
946 GC_REF_SET_BLACK(ref); in gc_scan_black()
947 GC_STACK_PUSH(ref); in gc_scan_black()
957 } else if (GC_TYPE(ref) == IS_REFERENCE) { in gc_scan_black()
958 if (Z_REFCOUNTED(((zend_reference*)ref)->val)) { in gc_scan_black()
959 ref = Z_COUNTED(((zend_reference*)ref)->val); in gc_scan_black()
960 GC_ADDREF(ref); in gc_scan_black()
961 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan_black()
962 GC_REF_SET_BLACK(ref); in gc_scan_black()
969 ref = GC_STACK_POP(); in gc_scan_black()
970 if (ref) { in gc_scan_black()
975 static void gc_mark_grey(zend_refcounted *ref, gc_stack *stack) in gc_mark_grey() argument
986 if (GC_TYPE(ref) == IS_OBJECT) { in gc_mark_grey()
987 zend_object *obj = (zend_object*)ref; in gc_mark_grey()
989 if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED))) { in gc_mark_grey()
1004 ref = Z_COUNTED_P(entry); in gc_mark_grey()
1008 GC_DELREF(ref); in gc_mark_grey()
1010 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
1011 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
1012 GC_STACK_PUSH(ref); in gc_mark_grey()
1028 ref = Z_COUNTED_P(entry); in gc_mark_grey()
1032 GC_DELREF(ref); in gc_mark_grey()
1034 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
1035 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
1036 GC_STACK_PUSH(ref); in gc_mark_grey()
1053 ref = Z_COUNTED_P(zv); in gc_mark_grey()
1054 GC_DELREF(ref); in gc_mark_grey()
1055 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
1056 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
1057 GC_STACK_PUSH(ref); in gc_mark_grey()
1068 ref = Z_COUNTED_P(zv); in gc_mark_grey()
1069 GC_DELREF(ref); in gc_mark_grey()
1070 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
1071 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
1075 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_mark_grey() local
1076 GC_DELREF(ref); in gc_mark_grey()
1077 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
1078 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
1079 GC_STACK_PUSH(ref); in gc_mark_grey()
1090 } else if (GC_TYPE(ref) == IS_ARRAY) { in gc_mark_grey()
1091 ZEND_ASSERT(((zend_array*)ref) != &EG(symbol_table)); in gc_mark_grey()
1092 ht = (zend_array*)ref; in gc_mark_grey()
1107 ref = Z_COUNTED_P(zv); in gc_mark_grey()
1108 GC_DELREF(ref); in gc_mark_grey()
1109 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
1110 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
1118 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_mark_grey() local
1119 GC_DELREF(ref); in gc_mark_grey()
1120 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
1121 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
1122 GC_STACK_PUSH(ref); in gc_mark_grey()
1132 } else if (GC_TYPE(ref) == IS_REFERENCE) { in gc_mark_grey()
1133 if (Z_REFCOUNTED(((zend_reference*)ref)->val)) { in gc_mark_grey()
1134 ref = Z_COUNTED(((zend_reference*)ref)->val); in gc_mark_grey()
1135 GC_DELREF(ref); in gc_mark_grey()
1136 if (!GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_mark_grey()
1137 GC_REF_SET_COLOR(ref, GC_GREY); in gc_mark_grey()
1144 ref = GC_STACK_POP(); in gc_mark_grey()
1145 if (ref) { in gc_mark_grey()
1162 while (!GC_IS_UNUSED(free->ref)) { in gc_compact()
1165 while (GC_IS_UNUSED(scan->ref)) { in gc_compact()
1169 p = scan->ref; in gc_compact()
1170 free->ref = p; in gc_compact()
1196 if (GC_IS_ROOT(current->ref)) { in gc_mark_roots()
1197 if (GC_REF_CHECK_COLOR(current->ref, GC_PURPLE)) { in gc_mark_roots()
1198 GC_REF_SET_COLOR(current->ref, GC_GREY); in gc_mark_roots()
1199 gc_mark_grey(current->ref, stack); in gc_mark_roots()
1206 static void gc_scan(zend_refcounted *ref, gc_stack *stack) in gc_scan() argument
1215 if (!GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_scan()
1219 if (GC_REFCOUNT(ref) > 0) { in gc_scan()
1220 if (!GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_scan()
1221 GC_REF_SET_BLACK(ref); in gc_scan()
1227 gc_scan_black(ref, _stack->next); in gc_scan()
1233 if (GC_TYPE(ref) == IS_OBJECT) { in gc_scan()
1234 zend_object *obj = (zend_object*)ref; in gc_scan()
1235 if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED))) { in gc_scan()
1247 ref = Z_COUNTED_P(entry); in gc_scan()
1248 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1249 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1250 GC_STACK_PUSH(ref); in gc_scan()
1266 ref = Z_COUNTED_P(zv); in gc_scan()
1267 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1268 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1269 GC_STACK_PUSH(ref); in gc_scan()
1281 ref = Z_COUNTED_P(zv); in gc_scan()
1282 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1283 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1287 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_scan() local
1288 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1289 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1290 GC_STACK_PUSH(ref); in gc_scan()
1301 } else if (GC_TYPE(ref) == IS_ARRAY) { in gc_scan()
1302 ht = (HashTable *)ref; in gc_scan()
1319 ref = Z_COUNTED_P(zv); in gc_scan()
1320 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1321 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1329 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_scan() local
1330 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1331 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1332 GC_STACK_PUSH(ref); in gc_scan()
1342 } else if (GC_TYPE(ref) == IS_REFERENCE) { in gc_scan()
1343 if (Z_REFCOUNTED(((zend_reference*)ref)->val)) { in gc_scan()
1344 ref = Z_COUNTED(((zend_reference*)ref)->val); in gc_scan()
1345 if (GC_REF_CHECK_COLOR(ref, GC_GREY)) { in gc_scan()
1346 GC_REF_SET_COLOR(ref, GC_WHITE); in gc_scan()
1353 ref = GC_STACK_POP(); in gc_scan()
1354 if (ref) { in gc_scan()
1370 if (GC_IS_ROOT(current->ref)) { in gc_scan_roots()
1371 if (GC_REF_CHECK_COLOR(current->ref, GC_GREY)) { in gc_scan_roots()
1372 GC_REF_SET_COLOR(current->ref, GC_WHITE); in gc_scan_roots()
1373 gc_scan(current->ref, stack); in gc_scan_roots()
1382 if (GC_IS_ROOT(current->ref)) { in gc_scan_roots()
1383 if (GC_REF_CHECK_COLOR(current->ref, GC_GREY)) { in gc_scan_roots()
1384 GC_REF_SET_COLOR(current->ref, GC_WHITE); in gc_scan_roots()
1385 gc_scan(current->ref, stack); in gc_scan_roots()
1392 static void gc_add_garbage(zend_refcounted *ref) in gc_add_garbage() argument
1410 buf->ref = GC_MAKE_GARBAGE(ref); in gc_add_garbage()
1413 GC_REF_SET_INFO(ref, idx | GC_BLACK); in gc_add_garbage()
1417 static int gc_collect_white(zend_refcounted *ref, uint32_t *flags, gc_stack *stack) in gc_collect_white() argument
1428 if (GC_TYPE(ref) != IS_REFERENCE) { in gc_collect_white()
1432 if (GC_TYPE(ref) == IS_OBJECT) { in gc_collect_white()
1433 zend_object *obj = (zend_object*)ref; in gc_collect_white()
1435 if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED))) { in gc_collect_white()
1440 if (!GC_INFO(ref)) { in gc_collect_white()
1441 gc_add_garbage(ref); in gc_collect_white()
1459 ref = Z_COUNTED_P(entry); in gc_collect_white()
1460 GC_ADDREF(ref); in gc_collect_white()
1461 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1462 GC_REF_SET_BLACK(ref); in gc_collect_white()
1463 GC_STACK_PUSH(ref); in gc_collect_white()
1480 ref = Z_COUNTED_P(entry); in gc_collect_white()
1481 GC_ADDREF(ref); in gc_collect_white()
1482 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1483 GC_REF_SET_BLACK(ref); in gc_collect_white()
1484 GC_STACK_PUSH(ref); in gc_collect_white()
1501 ref = Z_COUNTED_P(zv); in gc_collect_white()
1502 GC_ADDREF(ref); in gc_collect_white()
1503 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1504 GC_REF_SET_BLACK(ref); in gc_collect_white()
1505 GC_STACK_PUSH(ref); in gc_collect_white()
1517 ref = Z_COUNTED_P(zv); in gc_collect_white()
1518 GC_ADDREF(ref); in gc_collect_white()
1519 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1520 GC_REF_SET_BLACK(ref); in gc_collect_white()
1524 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_collect_white() local
1525 GC_ADDREF(ref); in gc_collect_white()
1526 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1527 GC_REF_SET_BLACK(ref); in gc_collect_white()
1528 GC_STACK_PUSH(ref); in gc_collect_white()
1539 } else if (GC_TYPE(ref) == IS_ARRAY) { in gc_collect_white()
1541 if (!GC_INFO(ref)) { in gc_collect_white()
1542 gc_add_garbage(ref); in gc_collect_white()
1544 ht = (zend_array*)ref; in gc_collect_white()
1560 ref = Z_COUNTED_P(zv); in gc_collect_white()
1561 GC_ADDREF(ref); in gc_collect_white()
1562 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1563 GC_REF_SET_BLACK(ref); in gc_collect_white()
1571 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_collect_white() local
1572 GC_ADDREF(ref); in gc_collect_white()
1573 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1574 GC_REF_SET_BLACK(ref); in gc_collect_white()
1575 GC_STACK_PUSH(ref); in gc_collect_white()
1585 } else if (GC_TYPE(ref) == IS_REFERENCE) { in gc_collect_white()
1586 if (Z_REFCOUNTED(((zend_reference*)ref)->val)) { in gc_collect_white()
1587 ref = Z_COUNTED(((zend_reference*)ref)->val); in gc_collect_white()
1588 GC_ADDREF(ref); in gc_collect_white()
1589 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_white()
1590 GC_REF_SET_BLACK(ref); in gc_collect_white()
1597 ref = GC_STACK_POP(); in gc_collect_white()
1598 if (ref) { in gc_collect_white()
1608 zend_refcounted *ref; in gc_collect_roots() local
1615 if (GC_IS_ROOT(current->ref)) { in gc_collect_roots()
1616 if (GC_REF_CHECK_COLOR(current->ref, GC_BLACK)) { in gc_collect_roots()
1617 GC_REF_SET_INFO(current->ref, 0); /* reset GC_ADDRESS() and keep GC_BLACK */ in gc_collect_roots()
1632 ref = current->ref; in gc_collect_roots()
1633 ZEND_ASSERT(GC_IS_ROOT(ref)); in gc_collect_roots()
1634 current->ref = GC_MAKE_GARBAGE(ref); in gc_collect_roots()
1635 if (GC_REF_CHECK_COLOR(ref, GC_WHITE)) { in gc_collect_roots()
1636 GC_REF_SET_BLACK(ref); in gc_collect_roots()
1637 count += gc_collect_white(ref, flags, stack); in gc_collect_roots()
1645 static int gc_remove_nested_data_from_buffer(zend_refcounted *ref, gc_root_buffer *root, gc_stack *… in gc_remove_nested_data_from_buffer() argument
1658 } else if (GC_REF_ADDRESS(ref) != 0 in gc_remove_nested_data_from_buffer()
1659 && GC_REF_CHECK_COLOR(ref, GC_BLACK)) { in gc_remove_nested_data_from_buffer()
1660 GC_TRACE_REF(ref, "removing from buffer"); in gc_remove_nested_data_from_buffer()
1661 GC_REMOVE_FROM_BUFFER(ref); in gc_remove_nested_data_from_buffer()
1663 } else if (GC_TYPE(ref) == IS_REFERENCE) { in gc_remove_nested_data_from_buffer()
1664 if (Z_REFCOUNTED(((zend_reference*)ref)->val)) { in gc_remove_nested_data_from_buffer()
1665 ref = Z_COUNTED(((zend_reference*)ref)->val); in gc_remove_nested_data_from_buffer()
1673 if (GC_TYPE(ref) == IS_OBJECT) { in gc_remove_nested_data_from_buffer()
1674 zend_object *obj = (zend_object*)ref; in gc_remove_nested_data_from_buffer()
1676 if (EXPECTED(!(OBJ_FLAGS(ref) & IS_OBJ_FREE_CALLED))) { in gc_remove_nested_data_from_buffer()
1688 ref = Z_COUNTED_P(entry); in gc_remove_nested_data_from_buffer()
1689 GC_STACK_PUSH(ref); in gc_remove_nested_data_from_buffer()
1701 ref = Z_COUNTED_P(zv); in gc_remove_nested_data_from_buffer()
1702 GC_STACK_PUSH(ref); in gc_remove_nested_data_from_buffer()
1716 ref = Z_COUNTED_P(zv); in gc_remove_nested_data_from_buffer()
1720 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_remove_nested_data_from_buffer() local
1721 GC_STACK_PUSH(ref); in gc_remove_nested_data_from_buffer()
1730 } else if (GC_TYPE(ref) == IS_ARRAY) { in gc_remove_nested_data_from_buffer()
1731 ht = (zend_array*)ref; in gc_remove_nested_data_from_buffer()
1747 ref = Z_COUNTED_P(zv); in gc_remove_nested_data_from_buffer()
1755 zend_refcounted *ref = Z_COUNTED_P(zv); in gc_remove_nested_data_from_buffer() local
1756 GC_STACK_PUSH(ref); in gc_remove_nested_data_from_buffer()
1767 ref = GC_STACK_POP(); in gc_remove_nested_data_from_buffer()
1768 if (ref) { in gc_remove_nested_data_from_buffer()
1848 if (GC_IS_GARBAGE(current->ref)) { in zend_gc_collect_cycles()
1849 p = GC_GET_PTR(current->ref); in zend_gc_collect_cycles()
1854 current->ref = GC_MAKE_DTOR_GARBAGE(obj); in zend_gc_collect_cycles()
1871 if (GC_IS_DTOR_GARBAGE(current->ref)) { in zend_gc_collect_cycles()
1872 p = GC_GET_PTR(current->ref); in zend_gc_collect_cycles()
1887 if (GC_IS_DTOR_GARBAGE(current->ref)) { in zend_gc_collect_cycles()
1888 p = GC_GET_PTR(current->ref); in zend_gc_collect_cycles()
1891 current->ref = p; in zend_gc_collect_cycles()
1924 if (GC_IS_GARBAGE(current->ref)) { in zend_gc_collect_cycles()
1925 p = GC_GET_PTR(current->ref); in zend_gc_collect_cycles()
1934 current->ref = GC_MAKE_GARBAGE(((char*)obj) - obj->handlers->offset); in zend_gc_collect_cycles()
1962 if (GC_IS_GARBAGE(current->ref)) { in zend_gc_collect_cycles()
1963 p = GC_GET_PTR(current->ref); in zend_gc_collect_cycles()