com php-src: Don't waste SHM for unused Buckets: ext/opcache/ze nd_persist.c ext/opcache/zend_persist_calc.c

From: Date: Mon, 04 Aug 2014 18:51:41 +0000
Subject: com php-src: Don't waste SHM for unused Buckets: ext/opcache/ze nd_persist.c ext/opcache/zend_persist_calc.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-79729@lists.php.net to get a copy of this message
Commit: 3700364ca53b54fc26b9fa17bb98ad839541b51a Author: Dmitry Stogov <dmitry@zend.com> Mon, 4 Aug 2014 22:51:41 +0400 Parents: b5590a2f874f7370c16619eb87bb89268aa7fe03 Branches: phpng Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=3700364ca53b54fc26b9fa17bb98ad839541b51a Log: Don't waste SHM for unused Buckets Changed paths: M ext/opcache/zend_persist.c M ext/opcache/zend_persist_calc.c Diff: diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c index e47cfda..69eecfd 100644 --- a/ext/opcache/zend_persist.c +++ b/ext/opcache/zend_persist.c @@ -86,11 +86,18 @@ static void zend_hash_persist(HashTable *ht, zend_persist_func_t pPersistElement return; } if (ht->u.flags & HASH_FLAG_PACKED) { - zend_accel_store(ht->arData, sizeof(Bucket) * ht->nTableSize); + zend_accel_store(ht->arData, sizeof(Bucket) * ht->nNumUsed); ht->arHash = (zend_uint*)&uninitialized_bucket; } else { - zend_accel_store(ht->arData, (sizeof(Bucket) + sizeof(zend_uint)) * ht->nTableSize); - ht->arHash = (zend_uint*)(ht->arData + ht->nTableSize); + Bucket *d = (Bucket*)ZCG(mem); + zend_uint *h = (zend_uint*)(d + ht->nNumUsed); + + ZCG(mem) = (void*)(h + ht->nTableSize); + memcpy(d, ht->arData, sizeof(Bucket) * ht->nNumUsed); + memcpy(h, ht->arHash, sizeof(zend_uint) * ht->nTableSize); + efree(ht->arData); + ht->arData = d; + ht->arHash = h; } for (idx = 0; idx < ht->nNumUsed; idx++) { p = ht->arData + idx; @@ -116,11 +123,17 @@ static void zend_hash_persist_immutable(HashTable *ht TSRMLS_DC) return; } if (ht->u.flags & HASH_FLAG_PACKED) { - ht->arData = zend_accel_memdup(ht->arData, sizeof(Bucket) * ht->nTableSize); + ht->arData = zend_accel_memdup(ht->arData, sizeof(Bucket) * ht->nNumUsed); ht->arHash = (zend_uint*)&uninitialized_bucket; } else { - ht->arData = zend_accel_memdup(ht->arData, (sizeof(Bucket) + sizeof(zend_uint)) * ht->nTableSize); - ht->arHash = (zend_uint*)(ht->arData + ht->nTableSize); + Bucket *d = (Bucket*)ZCG(mem); + zend_uint *h = (zend_uint*)(d + ht->nNumUsed); + + ZCG(mem) = (void*)(h + ht->nTableSize); + memcpy(d, ht->arData, sizeof(Bucket) * ht->nNumUsed); + memcpy(h, ht->arHash, sizeof(zend_uint) * ht->nTableSize); + ht->arData = d; + ht->arHash = h; } for (idx = 0; idx < ht->nNumUsed; idx++) { p = ht->arData + idx; diff --git a/ext/opcache/zend_persist_calc.c b/ext/opcache/zend_persist_calc.c index b6740db...0732cc2 100644 --- a/ext/opcache/zend_persist_calc.c +++ b/ext/opcache/zend_persist_calc.c @@ -63,9 +63,9 @@ static uint zend_hash_persist_calc(HashTable *ht, uint (*pPersistElement)(zval * RETURN_SIZE(); } if (ht->u.flags & HASH_FLAG_PACKED) { - ADD_DUP_SIZE(ht->arData, sizeof(Bucket) * ht->nTableSize); + ADD_SIZE(sizeof(Bucket) * ht->nNumUsed); } else { - ADD_DUP_SIZE(ht->arData, (sizeof(Bucket) + sizeof(zend_uint)) * ht->nTableSize); + ADD_SIZE(sizeof(Bucket) * ht->nNumUsed + sizeof(zend_uint) * ht->nTableSize); } for (idx = 0; idx < ht->nNumUsed; idx++) {

« previous php.cvs (#79729) next »