File tree Expand file tree Collapse file tree 2 files changed +35
-0
lines changed Expand file tree Collapse file tree 2 files changed +35
-0
lines changed Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #60598 (cli/apache sapi segfault on objects manipulation)
3
+ --FILE--
4
+ <?php
5
+ define ('OBJECT_COUNT ' , 10000 );
6
+
7
+ $ containers = array ();
8
+
9
+ class Object {
10
+ protected $ _guid = 0 ;
11
+ public function __construct () {
12
+ global $ containers ;
13
+ $ this ->guid = 1 ;
14
+ $ containers [spl_object_hash ($ this )] = $ this ;
15
+ }
16
+ public function __destruct () {
17
+ global $ containers ;
18
+ $ containers [spl_object_hash ($ this )] = NULL ;
19
+ }
20
+ }
21
+
22
+ for ($ i = 0 ; $ i < OBJECT_COUNT ; ++$ i ) {
23
+ new Object ();
24
+ }
25
+
26
+ // You probably won't see this because of the "zend_mm_heap corrupted"
27
+ ?>
28
+ If you see this, try to increase OBJECT_COUNT to 100,000
29
+ --EXPECT--
30
+ If you see this, try to increase OBJECT_COUNT to 100,000
Original file line number Diff line number Diff line change @@ -57,6 +57,11 @@ ZEND_API void zend_objects_store_call_destructors(zend_objects_store *objects TS
57
57
obj -> dtor (obj -> object , i TSRMLS_CC );
58
58
obj = & objects -> object_buckets [i ].bucket .obj ;
59
59
obj -> refcount -- ;
60
+
61
+ if (obj -> refcount == 0 ) {
62
+ /* in case gc_collect_cycle is triggered before free_storage */
63
+ GC_REMOVE_ZOBJ_FROM_BUFFER (obj );
64
+ }
60
65
}
61
66
}
62
67
}
You can’t perform that action at this time.
0 commit comments