cvs: php4 / NEWS /ext/standard output.c

From: Date: Thu, 02 Nov 2000 16:46:31 +0000
Subject: cvs: php4 / NEWS /ext/standard output.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-2418@lists.php.net to get a copy of this message
zeev Thu Nov 2 08:46:31 2000 EDT Modified files: /php4 NEWS /php4/ext/standard output.c Log: - Fixed a bug that caused PHP not to properly flush its output buffer, if more than one output buffer was used Index: php4/NEWS diff -u php4/NEWS:1.501 php4/NEWS:1.502 --- php4/NEWS:1.501 Thu Nov 2 04:14:49 2000 +++ php4/NEWS Thu Nov 2 08:46:30 2000 @@ -3,9 +3,13 @@ ?? ??? 2000, Version 4.0.4 + +- Fixed a bug that caused PHP not to properly flush its output buffer, if more + than one output buffer was used. (Zeev) - Fixed a bug that could draw the shutdown sequence of the PHP Apache module into an endless loop, under certain circumstances. It could cause Apache - processes under Solaris to get stuck, especially when using output buffering. + processes under Solaris to get stuck, especially when using output + buffering. (Zeev) - Add support for serializing references (Stas) - Fixed conflict with OpenLDAP and Oracle 8.1.x (Jani) - parse_ini_file() supports a new optional 2nd argument that instructs it Index: php4/ext/standard/output.c diff -u php4/ext/standard/output.c:1.34 php4/ext/standard/output.c:1.35 --- php4/ext/standard/output.c:1.34 Sun Oct 29 01:14:53 2000 +++ php4/ext/standard/output.c Thu Nov 2 08:46:30 2000 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: output.c,v 1.34 2000/10/29 09:14:53 thies Exp $ */ +/* $Id: output.c,v 1.35 2000/11/02 16:46:30 zeev Exp $ */ #include "php.h" #include "ext/standard/head.h" @@ -31,7 +31,6 @@ static int php_b_body_write(const char *str, uint str_length); static void php_ob_init(uint initial_size, uint block_size, zval *output_handler); -static void php_ob_destroy(void); static void php_ob_append(const char *text, uint text_length); #if 0 static void php_ob_prepend(const char *text, uint text_length); @@ -108,6 +107,7 @@ char *final_buffer=NULL; int final_buffer_length=0; zval *alternate_buffer=NULL; + char *to_be_destroyed_buffer; SLS_FETCH(); OLS_FETCH(); @@ -146,6 +146,7 @@ final_buffer = OG(active_ob_buffer).buffer; final_buffer_length = OG(active_ob_buffer).text_length; } + if (OG(nesting_level)==1) { /* end buffering */ if (SG(headers_sent) && !SG(request_info).headers_only) { OG(php_body_write) = php_ub_body_write_no_header; @@ -153,13 +154,31 @@ OG(php_body_write) = php_ub_body_write; } } + + to_be_destroyed_buffer = OG(active_ob_buffer).buffer; + + if (OG(nesting_level)>1) { /* restore previous buffer */ + php_ob_buffer *ob_buffer_p; + + zend_stack_top(&OG(ob_buffers), (void **) &ob_buffer_p); + OG(active_ob_buffer) = *ob_buffer_p; + zend_stack_del_top(&OG(ob_buffers)); + if (OG(nesting_level)==2) { /* destroy the stack */ + zend_stack_destroy(&OG(ob_buffers)); + } + } + if (send_buffer) { OG(php_body_write)(final_buffer, final_buffer_length); } + if (alternate_buffer) { zval_ptr_dtor(&alternate_buffer); } - php_ob_destroy(); + + efree(to_be_destroyed_buffer); + + OG(nesting_level)--; } @@ -225,27 +244,6 @@ OG(active_ob_buffer).buffer = (char *) emalloc(initial_size+1); OG(active_ob_buffer).text_length = 0; OG(active_ob_buffer).output_handler = output_handler; -} - - -static void php_ob_destroy() -{ - OLS_FETCH(); - - if (OG(nesting_level)>0) { - efree(OG(active_ob_buffer).buffer); - if (OG(nesting_level)>1) { /* restore previous buffer */ - php_ob_buffer *ob_buffer_p; - - zend_stack_top(&OG(ob_buffers), (void **) &ob_buffer_p); - OG(active_ob_buffer) = *ob_buffer_p; - zend_stack_del_top(&OG(ob_buffers)); - if (OG(nesting_level)==2) { /* destroy the stack */ - zend_stack_destroy(&OG(ob_buffers)); - } - } - } - OG(nesting_level)--; }

« previous php.cvs (#2418) next »