]> granicus.if.org Git - php/commitdiff
Fixed bug #69688 (segfault with eval and opcache fast shutdown)
authorXinchen Hui <laruence@php.net>
Fri, 22 May 2015 03:48:13 +0000 (11:48 +0800)
committerXinchen Hui <laruence@php.net>
Fri, 22 May 2015 03:48:13 +0000 (11:48 +0800)
NEWS
ext/opcache/ZendAccelerator.c

diff --git a/NEWS b/NEWS
index 162cdf9ff12e72ed8594f0ad60ac343a5ea178c5..e1d67eeadb48b5699bd76bb202b33be6df31e3f4 100644 (file)
--- a/NEWS
+++ b/NEWS
   . 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
index c9f58963acd0005557aff09b61872f5700b5ae2f..36684218d8f83127b91a01359c927515200bd655 100644 (file)
@@ -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;
 }