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