From: Xinchen Hui Date: Fri, 22 May 2015 03:48:13 +0000 (+0800) Subject: Fixed bug #69688 (segfault with eval and opcache fast shutdown) X-Git-Tag: PRE_PHP7_NSAPI_REMOVAL~42^2~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8c0ba65d6a4d1a1908990096bbe2d15a8b65e660;p=php Fixed bug #69688 (segfault with eval and opcache fast shutdown) --- diff --git a/NEWS b/NEWS index 162cdf9ff1..e1d67eeadb 100644 --- a/NEWS +++ b/NEWS @@ -143,6 +143,8 @@ . Removed mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb(), mcrypt_ofb(). (Nikita) - Opcache: + . Fixed bug #69688 (segfault with eval and opcache fast shutdown). + (Laruence) . Added experimental (disabled by default) file based opcode cache. (Dmitry, Laruence, Anatol) . Fixed bug with try blocks being removed when extended_info opcode diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index c9f58963ac..36684218d8 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -2146,7 +2146,6 @@ static inline void zend_accel_fast_del_bucket(HashTable *ht, uint32_t idx, Bucke uint32_t nIndex = p->h | ht->nTableMask; uint32_t i = HT_HASH(ht, nIndex); - ht->nNumUsed--; ht->nNumOfElements--; if (idx != i) { Bucket *prev = HT_HASH_TO_BUCKET(ht, i); @@ -2267,6 +2266,9 @@ static void zend_accel_fast_shutdown(void) zend_accel_fast_del_bucket(EG(zend_constants), HT_IDX_TO_HASH(_idx-1), _p); } } ZEND_HASH_FOREACH_END(); + EG(function_table)->nNumUsed = EG(function_table)->nNumOfElements; + EG(class_table)->nNumUsed = EG(class_table)->nNumOfElements; + EG(zend_constants)->nNumUsed = EG(zend_constants)->nNumOfElements; CG(unclean_shutdown) = 1; }