Skip to content

Commit

Permalink
Split zend_objects_store_put() into hot/cold parts
Browse files Browse the repository at this point in the history
  • Loading branch information
dstogov committed Nov 15, 2018
1 parent 35a9ec1 commit 9ab3b42
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions Zend/zend_objects_API.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,18 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_free_object_storage(zend_objects_


/* Store objects API */
static ZEND_COLD zend_never_inline void ZEND_FASTCALL zend_objects_store_put_cold(zend_object *object)
{
int handle;
uint32_t new_size = 2 * EG(objects_store).size;

EG(objects_store).object_buckets = (zend_object **) erealloc(EG(objects_store).object_buckets, new_size * sizeof(zend_object*));
/* Assign size after realloc, in case it fails */
EG(objects_store).size = new_size;
handle = EG(objects_store).top++;
object->handle = handle;
EG(objects_store).object_buckets[handle] = object;
}

ZEND_API void ZEND_FASTCALL zend_objects_store_put(zend_object *object)
{
Expand All @@ -134,13 +146,10 @@ ZEND_API void ZEND_FASTCALL zend_objects_store_put(zend_object *object)
if (EG(objects_store).free_list_head != -1 && EXPECTED(!(EG(flags) & EG_FLAGS_IN_SHUTDOWN))) {
handle = EG(objects_store).free_list_head;
EG(objects_store).free_list_head = GET_OBJ_BUCKET_NUMBER(EG(objects_store).object_buckets[handle]);
} else if (UNEXPECTED(EG(objects_store).top == EG(objects_store).size)) {
zend_objects_store_put_cold(object);
return;
} else {
if (UNEXPECTED(EG(objects_store).top == EG(objects_store).size)) {
uint32_t new_size = 2 * EG(objects_store).size;
EG(objects_store).object_buckets = (zend_object **) erealloc(EG(objects_store).object_buckets, new_size * sizeof(zend_object*));
/* Assign size after realloc, in case it fails */
EG(objects_store).size = new_size;
}
handle = EG(objects_store).top++;
}
object->handle = handle;
Expand Down

0 comments on commit 9ab3b42

Please sign in to comment.