cvs: ZendEngine2 / zend_execute.c

From: 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)

« previous php.zend-engine.cvs (#2357) next »