cvs: ZendEngine2(PHP_5_3) / zend.h zend_API.c zend_globals.h

"Marcus Boerger" <[email protected]>
Newsgroups gmane.comp.php.cvs.zend
Message-ID <cvshelly1218475160@cvsserver>
helly		Mon Aug 11 17:19:20 2008 UTC

  Modified files:              (Branch: PHP_5_3)
    /ZendEngine2	zend.h zend_API.c zend_globals.h 
  Log:
  - MFH Fix memleak with new error handling stack'ing
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend.h?r1=1.293.2.11.2.9.2.25&r2=1.293.2.11.2.9.2.26&diff_format=u
Index: ZendEngine2/zend.h
diff -u ZendEngine2/zend.h:1.293.2.11.2.9.2.25 ZendEngine2/zend.h:1.293.2.11.2.9.2.26
--- ZendEngine2/zend.h:1.293.2.11.2.9.2.25	Fri Aug  8 17:47:26 2008
+++ ZendEngine2/zend.h	Mon Aug 11 17:19:19 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend.h,v 1.293.2.11.2.9.2.25 2008/08/08 17:47:26 helly Exp $ */
+/* $Id: zend.h,v 1.293.2.11.2.9.2.26 2008/08/11 17:19:19 helly Exp $ */
 
 #ifndef ZEND_H
 #define ZEND_H
@@ -752,11 +752,12 @@
 typedef struct {
 	zend_error_handling_t  handling;
 	zend_class_entry       *exception;
+	zval                   *user_handler;
 } zend_error_handling;
 
 ZEND_API void zend_save_error_handling(zend_error_handling *current TSRMLS_DC);
 ZEND_API void zend_replace_error_handling(zend_error_handling_t error_handling, zend_class_entry *exception_class, zend_error_handling *current TSRMLS_DC);
-ZEND_API void zend_restore_error_handling(const zend_error_handling *saved TSRMLS_DC);
+ZEND_API void zend_restore_error_handling(zend_error_handling *saved TSRMLS_DC);
 
 #endif /* ZEND_H */
 
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_API.c?r1=1.296.2.27.2.34.2.48&r2=1.296.2.27.2.34.2.49&diff_format=u
Index: ZendEngine2/zend_API.c
diff -u ZendEngine2/zend_API.c:1.296.2.27.2.34.2.48 ZendEngine2/zend_API.c:1.296.2.27.2.34.2.49
--- ZendEngine2/zend_API.c:1.296.2.27.2.34.2.48	Fri Aug  8 17:47:28 2008
+++ ZendEngine2/zend_API.c	Mon Aug 11 17:19:19 2008
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_API.c,v 1.296.2.27.2.34.2.48 2008/08/08 17:47:28 helly Exp $ */
+/* $Id: zend_API.c,v 1.296.2.27.2.34.2.49 2008/08/11 17:19:19 helly Exp $ */
 
 #include "zend.h"
 #include "zend_execute.h"
@@ -3467,6 +3467,10 @@
 {
 	current->handling = EG(error_handling);
 	current->exception = EG(exception_class);
+	current->user_handler = EG(user_error_handler);
+	if (current->user_handler) {
+		Z_ADDREF_P(current->user_handler);
+	}
 }
 /* }}} */
 
@@ -3474,23 +3478,29 @@
 {
 	if (current) {
 		zend_save_error_handling(current TSRMLS_CC);
+		if (error_handling != EH_NORMAL && EG(user_error_handler)) {
+			zval_ptr_dtor(&EG(user_error_handler));
+			EG(user_error_handler) = NULL;
+		}
 	}
 	EG(error_handling) = error_handling;
 	EG(exception_class) = error_handling == EH_THROW ? exception_class : NULL;
-
-	if (error_handling == EH_NORMAL) {
-		EG(user_error_handler)     = EG(user_error_handler_old);
-	} else {
-		EG(user_error_handler_old) = EG(user_error_handler);
-		EG(user_error_handler)     = NULL;
-	}
 }
 /* }}} */
 
-ZEND_API void zend_restore_error_handling(const zend_error_handling *saved TSRMLS_DC) /* {{{ */
+ZEND_API void zend_restore_error_handling(zend_error_handling *saved TSRMLS_DC) /* {{{ */
 {
 	EG(error_handling) = saved->handling;
 	EG(exception_class) = saved->handling == EH_THROW ? saved->exception : NULL;
+	if (saved->user_handler	&& saved->user_handler != EG(user_error_handler)) {
+		if (EG(user_error_handler)) {
+			zval_ptr_dtor(&EG(user_error_handler));
+		}
+		EG(user_error_handler) = saved->user_handler;
+	} else if (saved->user_handler) {
+		zval_ptr_dtor(&saved->user_handler);
+	}
+	saved->user_handler = NULL;
 }
 /* }}} */
 
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_globals.h?r1=1.141.2.3.2.7.2.17&r2=1.141.2.3.2.7.2.18&diff_format=u
Index: ZendEngine2/zend_globals.h
diff -u ZendEngine2/zend_globals.h:1.141.2.3.2.7.2.17 ZendEngine2/zend_globals.h:1.141.2.3.2.7.2.18
--- ZendEngine2/zend_globals.h:1.141.2.3.2.7.2.17	Thu Jul 24 22:21:38 2008
+++ ZendEngine2/zend_globals.h	Mon Aug 11 17:19:20 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_globals.h,v 1.141.2.3.2.7.2.17 2008/07/24 22:21:38 moriyoshi Exp $ */
+/* $Id: zend_globals.h,v 1.141.2.3.2.7.2.18 2008/08/11 17:19:20 helly Exp $ */
 
 #ifndef ZEND_GLOBALS_H
 #define ZEND_GLOBALS_H
@@ -222,7 +222,6 @@
 
 	int user_error_handler_error_reporting;
 	zval *user_error_handler;
-	zval *user_error_handler_old;
 	zval *user_exception_handler;
 	zend_stack user_error_handlers_error_reporting;
 	zend_ptr_stack user_error_handlers;



-- 
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.