]> granicus.if.org Git - php/commitdiff
Fixed segfault because resource is freed prematurely
authorXinchen Hui <laruence@php.net>
Sat, 21 Feb 2015 16:19:06 +0000 (00:19 +0800)
committerXinchen Hui <laruence@php.net>
Sat, 21 Feb 2015 16:19:06 +0000 (00:19 +0800)
Zend/tests/gc_034.phpt [new file with mode: 0644]
Zend/zend.c

diff --git a/Zend/tests/gc_034.phpt b/Zend/tests/gc_034.phpt
new file mode 100644 (file)
index 0000000..29f7aae
--- /dev/null
@@ -0,0 +1,11 @@
+--TEST--
+GC 033: GC in request shutdown and resource list destroy
+--FILE--
+<?php
+/* run with valgrind */
+$a = array(fopen(__FILE__, 'r'));
+$a[] = &$a;
+?>
+==DONE==
+--EXPECT--
+==DONE==
index b7a8784a69c3d4236f7c32d5931e467f212aa760..b1177eda5ad07e8ab9c2ac8b97d900918dc879c9 100644 (file)
@@ -898,14 +898,14 @@ ZEND_API void zend_deactivate(void) /* {{{ */
                shutdown_compiler();
        } zend_end_try();
 
-       zend_destroy_rsrc_list(&EG(regular_list));
-
 #if ZEND_DEBUG
        if (GC_G(gc_enabled) && !CG(unclean_shutdown)) {
                gc_collect_cycles();
        }
 #endif
 
+       zend_destroy_rsrc_list(&EG(regular_list));
+
 #if GC_BENCH
        fprintf(stderr, "GC Statistics\n");
        fprintf(stderr, "-------------\n");