]> granicus.if.org Git - php/commitdiff
Fix opcache optimizer info for time_nanosleep
authorTyson Andre <tysonandre775@hotmail.com>
Sun, 25 Aug 2019 14:48:52 +0000 (10:48 -0400)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 26 Aug 2019 09:13:26 +0000 (11:13 +0200)
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

ext/opcache/Optimizer/zend_func_info.c

index b32a954c1f1ffd3a8b619d549d697c712f496890..7f081047431333cad146a64f2c7a4cd8a02f0062 100644 (file)
@@ -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