File tree Expand file tree Collapse file tree 3 files changed +37
-0
lines changed Expand file tree Collapse file tree 3 files changed +37
-0
lines changed Original file line number Diff line number Diff line change 3
3
?? ??? 2013, PHP 5.4.20
4
4
5
5
- Core:
6
+ . Fixed bug #60598 (cli/apache sapi segfault on objects manipulation).
7
+ (Laruence)
6
8
. Fixed bug #65579 (Using traits with get_class_methods causes segfault).
7
9
(Adam)
8
10
. Fixed bug #65490 (Duplicate calls to get lineno & filename for
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