cvs: ZendEngine2 / zend.h zend_API.c zend_globals.h

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

  Modified files:              
    /ZendEngine2	zend.h zend_API.c zend_globals.h 
  Log:
  - Fix memleak with new error handling stack'ing
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend.h?r1=1.358&r2=1.359&diff_format=u
Index: ZendEngine2/zend.h
diff -u ZendEngine2/zend.h:1.358 ZendEngine2/zend.h:1.359
--- ZendEngine2/zend.h:1.358	Sun Aug 10 21:52:05 2008
+++ ZendEngine2/zend.h	Mon Aug 11 17:19:00 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend.h,v 1.358 2008/08/10 21:52:05 helly Exp $ */
+/* $Id: zend.h,v 1.359 2008/08/11 17:19:00 helly Exp $ */
 
 #ifndef ZEND_H
 #define ZEND_H
@@ -805,11 +805,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);
 
 #define ZEND_U_EQUAL(type, ustr, ulen, str, slen) \
 	((type == IS_STRING)? \
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_API.c?r1=1.484&r2=1.485&diff_format=u
Index: ZendEngine2/zend_API.c
diff -u ZendEngine2/zend_API.c:1.484 ZendEngine2/zend_API.c:1.485
--- ZendEngine2/zend_API.c:1.484	Fri Aug  8 17:10:49 2008
+++ ZendEngine2/zend_API.c	Mon Aug 11 17:19:01 2008
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_API.c,v 1.484 2008/08/08 17:10:49 helly Exp $ */
+/* $Id: zend_API.c,v 1.485 2008/08/11 17:19:01 helly Exp $ */
 
 #include "zend.h"
 #include "zend_execute.h"
@@ -4289,6 +4289,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);
+	}
 }
 /* }}} */
 
@@ -4296,23 +4300,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.179&r2=1.180&diff_format=u
Index: ZendEngine2/zend_globals.h
diff -u ZendEngine2/zend_globals.h:1.179 ZendEngine2/zend_globals.h:1.180
--- ZendEngine2/zend_globals.h:1.179	Wed Apr  9 21:07:45 2008
+++ ZendEngine2/zend_globals.h	Mon Aug 11 17:19:01 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_globals.h,v 1.179 2008/04/09 21:07:45 scottmac Exp $ */
+/* $Id: zend_globals.h,v 1.180 2008/08/11 17:19:01 helly Exp $ */
 
 #ifndef ZEND_GLOBALS_H
 #define ZEND_GLOBALS_H
@@ -210,7 +210,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.