diff --git a/NEWS b/NEWS index 2b9f8d76624..c4ca1a8b00a 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,7 @@ PHP NEWS - Core: . Fixed bug GH-8310 (Registry settings are no longer recognized). (cmb) + . Fixed potential race condition during resource ID allocation. (ryancaicse) - Date: . Fixed bug GH-7752 (DateTimeZone::getTransitions() returns insufficient diff --git a/TSRM/TSRM.c b/TSRM/TSRM.c index dc0ecff44ed..aa1c210ceec 100644 --- a/TSRM/TSRM.c +++ b/TSRM/TSRM.c @@ -288,9 +288,9 @@ TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate tsrm_resource_type *_tmp; _tmp = (tsrm_resource_type *) realloc(resource_types_table, sizeof(tsrm_resource_type)*id_count); if (!_tmp) { - tsrm_mutex_unlock(tsmm_mutex); TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate storage for resource")); *rsrc_id = 0; + tsrm_mutex_unlock(tsmm_mutex); return 0; } resource_types_table = _tmp; @@ -331,10 +331,10 @@ TSRM_API ts_rsrc_id ts_allocate_fast_id(ts_rsrc_id *rsrc_id, size_t *offset, siz size = TSRM_ALIGNED_SIZE(size); if (tsrm_reserved_size - tsrm_reserved_pos < size) { - tsrm_mutex_unlock(tsmm_mutex); TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate space for fast resource")); *rsrc_id = 0; *offset = 0; + tsrm_mutex_unlock(tsmm_mutex); return 0; } @@ -346,9 +346,9 @@ TSRM_API ts_rsrc_id ts_allocate_fast_id(ts_rsrc_id *rsrc_id, size_t *offset, siz tsrm_resource_type *_tmp; _tmp = (tsrm_resource_type *) realloc(resource_types_table, sizeof(tsrm_resource_type)*id_count); if (!_tmp) { - tsrm_mutex_unlock(tsmm_mutex); TSRM_ERROR((TSRM_ERROR_LEVEL_ERROR, "Unable to allocate storage for resource")); *rsrc_id = 0; + tsrm_mutex_unlock(tsmm_mutex); return 0; } resource_types_table = _tmp;