mirror of
https://github.com/php/php-src.git
synced 2024-09-30 22:36:12 +00:00
Merge branch 'PHP-5.5'
* PHP-5.5: Compact HashTables before storing them in shared memory Conflicts: ext/opcache/ZendAccelerator.c
This commit is contained in:
commit
456ef2ebfa
@ -1130,6 +1130,10 @@ static zend_persistent_script *cache_script_in_shared_memory(zend_persistent_scr
|
||||
return new_persistent_script;
|
||||
}
|
||||
|
||||
if (!compact_persistent_script(new_persistent_script)) {
|
||||
return new_persistent_script;
|
||||
}
|
||||
|
||||
/* exclusive lock */
|
||||
zend_shared_alloc_lock(TSRMLS_C);
|
||||
|
||||
|
@ -86,6 +86,53 @@ zend_persistent_script* create_persistent_script(void)
|
||||
return persistent_script;
|
||||
}
|
||||
|
||||
static int compact_hash_table(HashTable *ht)
|
||||
{
|
||||
uint i = 3;
|
||||
uint nSize;
|
||||
Bucket **t;
|
||||
|
||||
if (!ht->nNumOfElements) {
|
||||
/* Empty tables don't allocate space for Buckets */
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ht->nNumOfElements >= 0x80000000) {
|
||||
/* prevent overflow */
|
||||
nSize = 0x80000000;
|
||||
} else {
|
||||
while ((1U << i) < ht->nNumOfElements) {
|
||||
i++;
|
||||
}
|
||||
nSize = 1 << i;
|
||||
}
|
||||
|
||||
if (nSize >= ht->nTableSize) {
|
||||
/* Keep the size */
|
||||
return 1;
|
||||
}
|
||||
|
||||
t = (Bucket **)pemalloc(nSize * sizeof(Bucket *), ht->persistent);
|
||||
if (!t) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
pefree(ht->arBuckets, ht->persistent);
|
||||
|
||||
ht->arBuckets = t;
|
||||
ht->nTableSize = nSize;
|
||||
ht->nTableMask = ht->nTableSize - 1;
|
||||
zend_hash_rehash(ht);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int compact_persistent_script(zend_persistent_script *persistent_script)
|
||||
{
|
||||
return compact_hash_table(&persistent_script->function_table) &&
|
||||
compact_hash_table(&persistent_script->class_table);
|
||||
}
|
||||
|
||||
void free_persistent_script(zend_persistent_script *persistent_script, int destroy_elements)
|
||||
{
|
||||
if (destroy_elements) {
|
||||
|
@ -28,6 +28,7 @@
|
||||
void zend_accel_copy_internal_functions(TSRMLS_D);
|
||||
|
||||
zend_persistent_script* create_persistent_script(void);
|
||||
int compact_persistent_script(zend_persistent_script *script);
|
||||
void free_persistent_script(zend_persistent_script *persistent_script, int destroy_elements);
|
||||
|
||||
void zend_accel_free_user_functions(HashTable *ht TSRMLS_DC);
|
||||
|
Loading…
Reference in New Issue
Block a user