diff options
-rw-r--r-- | ext/opcache/shared_alloc_win32.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/ext/opcache/shared_alloc_win32.c b/ext/opcache/shared_alloc_win32.c index cf4bce005d..fd5d334269 100644 --- a/ext/opcache/shared_alloc_win32.c +++ b/ext/opcache/shared_alloc_win32.c @@ -205,14 +205,19 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_ err = GetLastError(); if (ret == ALLOC_FAIL_MAPPING) { /* Mapping failed, wait for mapping object to get freed and retry */ - CloseHandle(memfile); + CloseHandle(memfile); memfile = NULL; + if (++map_retries >= MAX_MAP_RETRIES) { + break; + } + zend_shared_alloc_unlock_win32(); Sleep(1000 * (map_retries + 1)); + zend_shared_alloc_lock_win32(); } else { zend_shared_alloc_unlock_win32(); return ret; } - } while (++map_retries < MAX_MAP_RETRIES); + } while (1); if (map_retries == MAX_MAP_RETRIES) { zend_shared_alloc_unlock_win32(); |