summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2016-03-25 12:35:20 +0800
committerXinchen Hui <laruence@gmail.com>2016-03-25 12:35:20 +0800
commit0e5fa32883e97f72bdbe084fda3dd5a74ffc28a0 (patch)
treef9c940f54031ef4be5c285c9bf38c9f47b944d08
parent454ae8a6f36818d9e4b0f6a8b288ac60a7b871bb (diff)
parent1929fc9b16c836c1449dee3fd3570031ff8dcba1 (diff)
downloadphp-git-0e5fa32883e97f72bdbe084fda3dd5a74ffc28a0.tar.gz
Merge branch 'PHP-7.0'
-rw-r--r--ext/standard/basic_functions.c1
-rw-r--r--ext/standard/tests/general_functions/bug71891.phpt14
-rw-r--r--main/main.c27
3 files changed, 31 insertions, 11 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index f8121c1ebf..10d7622ee1 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -5011,7 +5011,6 @@ PHPAPI void php_call_shutdown_functions(void) /* {{{ */
zend_hash_apply(BG(user_shutdown_function_names), user_shutdown_function_call);
}
zend_end_try();
- php_free_shutdown_functions();
}
}
/* }}} */
diff --git a/ext/standard/tests/general_functions/bug71891.phpt b/ext/standard/tests/general_functions/bug71891.phpt
new file mode 100644
index 0000000000..b1f7e200d8
--- /dev/null
+++ b/ext/standard/tests/general_functions/bug71891.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Bug #71891 (header_register_callback() and register_shutdown_function())
+--FILE--
+<?php
+
+header_register_callback(function () {
+ echo 'header';
+ register_shutdown_function(function () {
+ echo 'shutdown';
+ });
+});
+?>
+--EXPECT--
+header
diff --git a/main/main.c b/main/main.c
index ab879369bc..fcb42b43b4 100644
--- a/main/main.c
+++ b/main/main.c
@@ -1712,6 +1712,9 @@ void php_request_shutdown_for_hook(void *dummy)
if (PG(modules_activated)) {
zend_deactivate_modules();
+ }
+
+ if (PG(modules_activated)) {
php_free_shutdown_functions();
}
@@ -1802,7 +1805,6 @@ void php_request_shutdown(void *dummy)
/* 5. Call all extensions RSHUTDOWN functions */
if (PG(modules_activated)) {
zend_deactivate_modules();
- php_free_shutdown_functions();
}
/* 6. Shutdown output layer (send the set HTTP headers, cleanup output handlers, etc.) */
@@ -1810,7 +1812,12 @@ void php_request_shutdown(void *dummy)
php_output_deactivate();
} zend_end_try();
- /* 7. Destroy super-globals */
+ /* 7. Free shutdown functions */
+ if (PG(modules_activated)) {
+ php_free_shutdown_functions();
+ }
+
+ /* 8. Destroy super-globals */
zend_try {
int i;
@@ -1819,37 +1826,37 @@ void php_request_shutdown(void *dummy)
}
} zend_end_try();
- /* 8. free request-bound globals */
+ /* 9. free request-bound globals */
php_free_request_globals();
- /* 9. Shutdown scanner/executor/compiler and restore ini entries */
+ /* 10. Shutdown scanner/executor/compiler and restore ini entries */
zend_deactivate();
- /* 10. Call all extensions post-RSHUTDOWN functions */
+ /* 11. Call all extensions post-RSHUTDOWN functions */
zend_try {
zend_post_deactivate_modules();
} zend_end_try();
- /* 11. SAPI related shutdown (free stuff) */
+ /* 12. SAPI related shutdown (free stuff) */
zend_try {
sapi_deactivate();
} zend_end_try();
- /* 12. free virtual CWD memory */
+ /* 13. free virtual CWD memory */
virtual_cwd_deactivate();
- /* 13. Destroy stream hashes */
+ /* 14. Destroy stream hashes */
zend_try {
php_shutdown_stream_hashes();
} zend_end_try();
- /* 14. Free Willy (here be crashes) */
+ /* 15. Free Willy (here be crashes) */
zend_interned_strings_restore();
zend_try {
shutdown_memory_manager(CG(unclean_shutdown) || !report_memleaks, 0);
} zend_end_try();
- /* 15. Reset max_execution_time */
+ /* 16. Reset max_execution_time */
zend_try {
zend_unset_timeout();
} zend_end_try();