summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2006-05-19 06:11:02 +0000
committerDmitry Stogov <dmitry@php.net>2006-05-19 06:11:02 +0000
commitab9e070bbfe1bfeb8b6956b0a8967dde329800bc (patch)
tree49828d593efbf1ffb09ec7cb3ee03f75b7862322
parent7324a30e8d90f96d3e0e28d9b6073b3ba894efc8 (diff)
downloadphp-git-ab9e070bbfe1bfeb8b6956b0a8967dde329800bc.tar.gz
Optimized zend_try/zend_catch macroses (eliminated memcpy())
-rw-r--r--Zend/zend.c4
-rw-r--r--Zend/zend.h18
-rw-r--r--Zend/zend_extensions.h2
-rw-r--r--Zend/zend_globals.h3
-rw-r--r--ext/standard/basic_functions.c6
-rw-r--r--main/main.c2
6 files changed, 17 insertions, 18 deletions
diff --git a/Zend/zend.c b/Zend/zend.c
index db3dcf2cea..6afcf6d369 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -1192,14 +1192,14 @@ ZEND_API void _zend_bailout(char *filename, uint lineno)
{
TSRMLS_FETCH();
- if (!EG(bailout_set)) {
+ if (!EG(bailout)) {
zend_output_debug_string(1, "%s(%d) : Bailed out without a bailout address!", filename, lineno);
exit(-1);
}
CG(unclean_shutdown) = 1;
CG(in_compilation) = EG(in_execution) = 0;
EG(current_execute_data) = NULL;
- longjmp(EG(bailout), FAILURE);
+ longjmp(*EG(bailout), FAILURE);
}
END_EXTERN_C()
diff --git a/Zend/zend.h b/Zend/zend.h
index 493ac8b01e..87fd9d839e 100644
--- a/Zend/zend.h
+++ b/Zend/zend.h
@@ -489,19 +489,19 @@ END_EXTERN_C()
#define zend_try \
{ \
- jmp_buf orig_bailout; \
- zend_bool orig_bailout_set=EG(bailout_set); \
+ jmp_buf *orig_bailout = EG(bailout); \
+ jmp_buf bailout; \
\
- EG(bailout_set) = 1; \
- memcpy(&orig_bailout, &EG(bailout), sizeof(jmp_buf)); \
- if (setjmp(EG(bailout))==0)
+ EG(bailout) = &bailout; \
+ if (setjmp(bailout)==0) {
#define zend_catch \
- else
+ } else { \
+ EG(bailout) = orig_bailout;
#define zend_end_try() \
- memcpy(&EG(bailout), &orig_bailout, sizeof(jmp_buf)); \
- EG(bailout_set) = orig_bailout_set; \
+ } \
+ EG(bailout) = orig_bailout; \
}
-#define zend_first_try EG(bailout_set)=0; zend_try
+#define zend_first_try EG(bailout)=NULL; zend_try
BEGIN_EXTERN_C()
ZEND_API char *get_zend_version(void);
diff --git a/Zend/zend_extensions.h b/Zend/zend_extensions.h
index 268f013663..58a26d6c72 100644
--- a/Zend/zend_extensions.h
+++ b/Zend/zend_extensions.h
@@ -27,7 +27,7 @@
/* The first number is the engine version and the rest is the date.
* This way engine 2/3 API no. is always greater than engine 1 API no..
*/
-#define ZEND_EXTENSION_API_NO 320051025
+#define ZEND_EXTENSION_API_NO 320060519
typedef struct _zend_extension_version_info {
int zend_extension_api_no;
diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h
index 1c6d5c4603..6c423cc515 100644
--- a/Zend/zend_globals.h
+++ b/Zend/zend_globals.h
@@ -169,7 +169,7 @@ struct _zend_executor_globals {
HashTable included_files; /* files already included */
- jmp_buf bailout;
+ jmp_buf *bailout;
int error_reporting;
int orig_error_reporting;
@@ -192,7 +192,6 @@ struct _zend_executor_globals {
zend_bool in_execution;
HashTable *in_autoload;
zend_function *autoload_func;
- zend_bool bailout_set;
zend_bool full_tables_cleanup;
/* for extended information support */
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 317ef37803..32643ea3b8 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -2316,13 +2316,13 @@ static int user_tick_function_compare(user_tick_function_entry * tick_fe1, user_
void php_call_shutdown_functions(TSRMLS_D)
{
- if (BG(user_shutdown_function_names))
+ if (BG(user_shutdown_function_names)) {
zend_try {
zend_hash_apply(BG(user_shutdown_function_names), (apply_func_t) user_shutdown_function_call TSRMLS_CC);
- memcpy(&EG(bailout), &orig_bailout, sizeof(jmp_buf));
- php_free_shutdown_functions(TSRMLS_C);
}
zend_end_try();
+ php_free_shutdown_functions(TSRMLS_C);
+ }
}
void php_free_shutdown_functions(TSRMLS_D)
diff --git a/main/main.c b/main/main.c
index 0fc8da9940..7910e9120f 100644
--- a/main/main.c
+++ b/main/main.c
@@ -1540,7 +1540,7 @@ int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_mod
ts_allocate_id(&core_globals_id, sizeof(php_core_globals), (ts_allocate_ctor) core_globals_ctor, NULL);
core_globals = ts_resource(core_globals_id);
#endif
- EG(bailout_set) = 0;
+ EG(bailout) = NULL;
EG(error_reporting) = E_ALL & ~E_NOTICE;
PG(header_is_being_sent) = 0;