Skip to content

Commit

Permalink
Optimized zend_try/zend_catch macroses (eliminated memcpy())
Browse files Browse the repository at this point in the history
  • Loading branch information
dstogov committed May 19, 2006
1 parent 95875d9 commit 14f6b91
Show file tree
Hide file tree
Showing 7 changed files with 18 additions and 18 deletions.
1 change: 1 addition & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ PHP NEWS
?? ??? 2006, PHP 5.2.0
- Disable realpath cache when open_basedir or safe_mode are enabled on a
per-request basis. (Ilia)
- Optimized zend_try/zend_catch macroses (eliminated memcpy()). (Dmitry)
- Optimized require_once/include_once (eliminated fopen() on second usage).
(Dmitry)
- Optimized request shutdown sequence. Restoring ini directives now
Expand Down
4 changes: 2 additions & 2 deletions Zend/zend.c
Original file line number Diff line number Diff line change
Expand Up @@ -760,14 +760,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()

Expand Down
18 changes: 9 additions & 9 deletions Zend/zend.h
Original file line number Diff line number Diff line change
Expand Up @@ -448,19 +448,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);
Expand Down
2 changes: 1 addition & 1 deletion Zend/zend_extensions.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 220060510
#define ZEND_EXTENSION_API_NO 220060519

typedef struct _zend_extension_version_info {
int zend_extension_api_no;
Expand Down
3 changes: 1 addition & 2 deletions Zend/zend_globals.h
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ struct _zend_executor_globals {

HashTable included_files; /* files already included */

jmp_buf bailout;
jmp_buf *bailout;

int error_reporting;
int orig_error_reporting;
Expand All @@ -199,7 +199,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 */
Expand Down
6 changes: 3 additions & 3 deletions ext/standard/basic_functions.c
Original file line number Diff line number Diff line change
Expand Up @@ -2366,13 +2366,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)
Expand Down
2 changes: 1 addition & 1 deletion main/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1437,7 +1437,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;
Expand Down

0 comments on commit 14f6b91

Please sign in to comment.