@@ -142,14 +142,14 @@ PHP_FUNCTION(header_register_callback)
142
142
}
143
143
/* }}} */
144
144
145
- static void sapi_run_header_callback (void )
145
+ static void sapi_run_header_callback (zval * callback )
146
146
{
147
147
int error ;
148
148
zend_fcall_info fci ;
149
149
char * callback_error = NULL ;
150
150
zval retval ;
151
151
152
- if (zend_fcall_info_init (& SG ( callback_func ) , 0 , & fci , & SG (fci_cache ), NULL , & callback_error ) == SUCCESS ) {
152
+ if (zend_fcall_info_init (callback , 0 , & fci , & SG (fci_cache ), NULL , & callback_error ) == SUCCESS ) {
153
153
fci .retval = & retval ;
154
154
155
155
error = zend_call_function (& fci , & SG (fci_cache ));
@@ -446,7 +446,6 @@ SAPI_API void sapi_activate(void)
446
446
SG (sapi_headers ).http_status_line = NULL ;
447
447
SG (sapi_headers ).mimetype = NULL ;
448
448
SG (headers_sent ) = 0 ;
449
- SG (callback_run ) = 0 ;
450
449
ZVAL_UNDEF (& SG (callback_func ));
451
450
SG (read_post_bytes ) = 0 ;
452
451
SG (request_info ).request_body = NULL ;
@@ -543,8 +542,6 @@ SAPI_API void sapi_deactivate(void)
543
542
sapi_send_headers_free ();
544
543
SG (sapi_started ) = 0 ;
545
544
SG (headers_sent ) = 0 ;
546
- SG (callback_run ) = 0 ;
547
- zval_ptr_dtor (& SG (callback_func ));
548
545
SG (request_info ).headers_read = 0 ;
549
546
SG (global_request_time ) = 0 ;
550
547
}
@@ -851,7 +848,7 @@ SAPI_API int sapi_send_headers(void)
851
848
int retval ;
852
849
int ret = FAILURE ;
853
850
854
- if (SG (headers_sent ) || SG (request_info ).no_headers || SG ( callback_run ) ) {
851
+ if (SG (headers_sent ) || SG (request_info ).no_headers ) {
855
852
return SUCCESS ;
856
853
}
857
854
@@ -871,9 +868,12 @@ SAPI_API int sapi_send_headers(void)
871
868
SG (sapi_headers ).send_default_content_type = 0 ;
872
869
}
873
870
874
- if (Z_TYPE (SG (callback_func )) != IS_UNDEF && !SG (callback_run )) {
875
- SG (callback_run ) = 1 ;
876
- sapi_run_header_callback ();
871
+ if (Z_TYPE (SG (callback_func )) != IS_UNDEF ) {
872
+ zval cb ;
873
+ ZVAL_COPY_VALUE (& cb , & SG (callback_func ));
874
+ ZVAL_UNDEF (& SG (callback_func ));
875
+ sapi_run_header_callback (& cb );
876
+ zval_ptr_dtor (& cb );
877
877
}
878
878
879
879
SG (headers_sent ) = 1 ;
0 commit comments