summaryrefslogtreecommitdiff
path: root/sapi/cli/php_cli_server.c
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2013-12-09 16:54:42 +0100
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2013-12-09 16:54:42 +0100
commitf33265d57281910652bb58f5f9d8bd9d9dd44fe8 (patch)
tree55198f6343c53a7873fe8dd7dd9f26c7383f7a40 /sapi/cli/php_cli_server.c
parentcfd5ea43017500379ae302a67347641712e921ac (diff)
downloadphp-git-f33265d57281910652bb58f5f9d8bd9d9dd44fe8.tar.gz
cli: don't cast away const in select() timeout argument
The timeout argument to select() is modified to reflect the time remaining when the function returns on a non-timeout condition. Passing a pointer to const data and casting away the const-ness is asking for trouble, but for some reason, this trouble manifests itself only on non-x86 architectures [whose implementation of select() in glibc is different from the one supplied for x86] Fix this by passing a stack copy of the timeout argument to select()
Diffstat (limited to 'sapi/cli/php_cli_server.c')
-rw-r--r--sapi/cli/php_cli_server.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c
index 105b8ae157..939eb5a501 100644
--- a/sapi/cli/php_cli_server.c
+++ b/sapi/cli/php_cli_server.c
@@ -893,9 +893,11 @@ static void php_cli_server_poller_remove(php_cli_server_poller *poller, int mode
static int php_cli_server_poller_poll(php_cli_server_poller *poller, const struct timeval *tv) /* {{{ */
{
+ struct timeval t = *tv;
+
memmove(&poller->active.rfds, &poller->rfds, sizeof(poller->rfds));
memmove(&poller->active.wfds, &poller->wfds, sizeof(poller->wfds));
- return php_select(poller->max_fd + 1, &poller->active.rfds, &poller->active.wfds, NULL, (struct timeval *)tv);
+ return php_select(poller->max_fd + 1, &poller->active.rfds, &poller->active.wfds, NULL, &t);
} /* }}} */
static int php_cli_server_poller_iter_on_active(php_cli_server_poller *poller, void *opaque, int(*callback)(void *, int fd, int events)) /* {{{ */