cvs: ZendEngine2 / zend_execute.c
| From: | Zeev Suraski | Date: | Wed, 11 Feb 2004 16:28:47 +0000 |
| Subject: | cvs: ZendEngine2 / zend_execute.c | ||
| Groups: | php.zend-engine.cvs | ||
| Request: | Send a blank email to php-zend-engine-cvs+get-2357@lists.php.net to get a copy of this message | ||
zeev Wed Feb 11 11:28:47 2004 EDT
Modified files:
/ZendEngine2 zend_execute.c
Log:
Fix leak with overloaded objects, when they're used just "for the hell
of it" :)
http://cvs.php.net/diff.php/ZendEngine2/zend_execute.c?r1=1.607&r2=1.608&ty=u
Index: ZendEngine2/zend_execute.c
diff -u ZendEngine2/zend_execute.c:1.607 ZendEngine2/zend_execute.c:1.608
--- ZendEngine2/zend_execute.c:1.607 Wed Feb 11 10:56:13 2004
+++ ZendEngine2/zend_execute.c Wed Feb 11 11:28:46 2004
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_execute.c,v 1.607 2004/02/11 15:56:13 zeev Exp $ */
+/* $Id: zend_execute.c,v 1.608 2004/02/11 16:28:46 zeev Exp $ */
#define ZEND_INTENSIVE_DEBUGGING 0
@@ -78,7 +78,9 @@
#define PZVAL_UNLOCK(z) zend_pzval_unlock_func(z TSRMLS_CC)
#define PZVAL_LOCK(z) zend_pzval_lock_func(z)
-#define SELECTIVE_PZVAL_LOCK(pzv, pzn) if (!((pzn)->u.EA.type & EXT_TYPE_UNUSED)) {
PZVAL_LOCK(pzv); }
+#define RETURN_VALUE_UNUSED(pzn) (((pzn)->u.EA.type & EXT_TYPE_UNUSED))
+#define SELECTIVE_PZVAL_LOCK(pzv, pzn) if (!RETURN_VALUE_UNUSED(pzn)) { PZVAL_LOCK(pzv); }
+
/* End of zend_execute_locks.h */
@@ -1091,10 +1093,15 @@
zval_dtor(offset);
}
FREE_OP(Ts, op2, EG(free_op2));
+
+ if (RETURN_VALUE_UNUSED(result) && ((*retval)->refcount == 0)) {
+ zval_dtor(*retval);
+ FREE_ZVAL(*retval);
+ return; /* no need for locking */
+ }
}
SELECTIVE_PZVAL_LOCK(*retval, result);
- return;
}
static void zend_pre_incdec_property(znode *result, znode *op1, znode *op2, temp_variable * Ts, int
(*incdec_op)(zval *) TSRMLS_DC)