From: Tyson Andre Date: Sun, 25 Aug 2019 14:48:52 +0000 (-0400) Subject: Fix opcache optimizer info for time_nanosleep X-Git-Tag: php-7.4.0RC1~42^2^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f5bccc0eb5bfe2b1c9ba55cf1df27f2a18a046fa;p=php Fix opcache optimizer info for time_nanosleep This can also return an array. See https://www.php.net/manual/en/function.time-nanosleep.php#refsect1-function.time-nanosleep-returnvalues > If the delay was interrupted by a signal, an associative array will be returned with the components: > > - seconds - number of seconds remaining in the delay > - nanoseconds - number of nanoseconds remaining in the delay Sending a SIGUSR1 to the below program would trigger this behavior. ``` pcntl_signal(\SIGUSR1, function ($signo, $signinfo) { echo "Handling a signal $signo\n"; }); echo "Sleeping for 100 seconds\n"; var_export(time_nanosleep(100, 0)); ``` The incomplete signature existed since c88ffa9a5. No phpt tests existed for time_nanosleep returning an array --- diff --git a/ext/opcache/Optimizer/zend_func_info.c b/ext/opcache/Optimizer/zend_func_info.c index b32a954c1f..7f08104743 100644 --- a/ext/opcache/Optimizer/zend_func_info.c +++ b/ext/opcache/Optimizer/zend_func_info.c @@ -277,7 +277,7 @@ static const func_info_t func_infos[] = { F0("sleep", MAY_BE_FALSE | MAY_BE_LONG), F0("usleep", MAY_BE_NULL | MAY_BE_FALSE), #if HAVE_NANOSLEEP - F0("time_nanosleep", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE), + F0("time_nanosleep", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_STRING | MAY_BE_ARRAY_OF_LONG), F0("time_sleep_until", MAY_BE_NULL | MAY_BE_FALSE | MAY_BE_TRUE), #endif #if HAVE_STRPTIME