From dc6fbec037951cff2532c44005ecd38db55cfad7 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sat, 28 Jan 2023 11:48:46 +0100 Subject: [PATCH] Fix missing zend_shared_alloc_unlock() (#10405) This code was refactored and the unlock was forgotten. The following assertion is triggered in debug mode: zend_shared_alloc_lock: Assertion `!(accel_globals.locked)' failed. And in release mode this likely deadlocks. Fix this by re-adding the unlock. --- ext/opcache/ZendAccelerator.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index a7f9431a06c..0d589c7c61d 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -4788,6 +4788,7 @@ static int accel_finish_startup(void) } if (pid == -1) { /* no subprocess was needed */ + /* The called function unlocks the shared alloc lock */ return accel_finish_startup_preload(false); } else if (pid == 0) { /* subprocess */ int ret = accel_finish_startup_preload(true); @@ -4805,6 +4806,8 @@ static int accel_finish_startup(void) preload_load(); } + zend_shared_alloc_unlock(); + if (WIFEXITED(status) && WEXITSTATUS(status) == 0) { return SUCCESS; } else {