From cb6188d3405e001c024a322222c830f931ea23f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20D=C3=BCsterhus?= Date: Wed, 5 Aug 2026 22:09:30 +0200 Subject: [PATCH] standard: Take `Time\Duration` in `Io\Poll\Context::wait()` RFC: https://wiki.php.net/rfc/duration_class --- NEWS | 2 ++ ext/standard/io_poll.c | 35 +++++++------------ ext/standard/io_poll.stub.php | 2 +- ext/standard/io_poll_arginfo.h | 5 ++- ext/standard/io_poll_decl.h | 8 ++--- .../poll/poll_stream_sock_modify_write.phpt | 2 +- .../tests/poll/poll_stream_sock_read.phpt | 2 +- .../poll/poll_stream_sock_remove_write.phpt | 4 +-- .../tests/poll/poll_stream_sock_rw_close.phpt | 4 +-- .../poll/poll_stream_sock_rw_max_events.phpt | 4 +-- .../poll/poll_stream_sock_rw_multi_edge.phpt | 16 ++++----- .../poll/poll_stream_sock_rw_multi_level.phpt | 16 ++++----- .../poll/poll_stream_sock_rw_single_edge.phpt | 4 +-- .../poll_stream_sock_rw_single_level.phpt | 4 +-- .../tests/poll/poll_stream_sock_write.phpt | 2 +- .../poll/poll_stream_sock_write_close.phpt | 2 +- .../tests/poll/poll_stream_tcp_read.phpt | 2 +- .../poll/poll_stream_tcp_read_max_events.phpt | 4 +-- .../poll_stream_tcp_read_multiple_level.phpt | 8 ++--- .../poll/poll_stream_tcp_read_one_shot.phpt | 6 ++-- ...l_stream_tcp_read_one_shot_max_events.phpt | 4 +-- .../poll/poll_stream_tcp_rw_one_shot.phpt | 6 ++-- .../poll_stream_tcp_rw_one_shot_mixed.phpt | 4 +-- .../poll/poll_stream_tcp_rw_single_level.phpt | 4 +-- .../tests/poll/poll_stream_wait_no_add.phpt | 2 +- 25 files changed, 72 insertions(+), 80 deletions(-) diff --git a/NEWS b/NEWS index 890c5d89039d..b99bdc51e87c 100644 --- a/NEWS +++ b/NEWS @@ -67,6 +67,8 @@ PHP NEWS is_link(), file_exists(), lstat(), stat(). (Girgias) . Fixed bug GH-22818 (stream_filter_register() orphaned user_filter_map on shutdown re-registration). (David Carlier) + . Io\Poll\Context::wait() now takes a Time\Duration object as a timeout. + (timwolla) 30 Jul 2026, PHP 8.6.0alpha3 diff --git a/ext/standard/io_poll.c b/ext/standard/io_poll.c index ca363c7b37d9..c29ccfee04f2 100644 --- a/ext/standard/io_poll.c +++ b/ext/standard/io_poll.c @@ -19,6 +19,7 @@ #include "php_poll.h" #include "io_poll_arginfo.h" #include "io_poll_decl.h" +#include "ext/date/php_time.h" /* Class entries */ static zend_class_entry *php_io_poll_backend_class_entry; @@ -774,38 +775,28 @@ PHP_METHOD(Io_Poll_Context, add) PHP_METHOD(Io_Poll_Context, wait) { - zend_long timeout_seconds = -1; - bool timeout_seconds_is_null = true; - zend_long timeout_microseconds = 0; + php_date_time_duration *timeout = NULL; zend_long max_events = 0; bool max_events_is_null = true; - ZEND_PARSE_PARAMETERS_START(0, 3) + ZEND_PARSE_PARAMETERS_START(0, 2) Z_PARAM_OPTIONAL - Z_PARAM_LONG_OR_NULL(timeout_seconds, timeout_seconds_is_null) - Z_PARAM_LONG(timeout_microseconds) + Z_PARAM_DATE_TIME_DURATION_OR_NULL(timeout) Z_PARAM_LONG_OR_NULL(max_events, max_events_is_null) ZEND_PARSE_PARAMETERS_END(); php_io_poll_context_object *intern = PHP_POLL_CONTEXT_OBJ_FROM_ZV(getThis()); - /* Build timespec from seconds + microseconds, or NULL for indefinite */ - struct timespec ts; - const struct timespec *timeout = NULL; - if (timeout_seconds >= 0) { - if (timeout_microseconds < 0) { - zend_argument_value_error(2, "must be greater than or equal to 0"); + /* Build timespec from php_date_time_duration, or NULL for indefinite */ + struct timespec timeout_ts; + if (timeout) { + if (timeout->duration.negative) { + zend_argument_value_error(2, "must not be negative"); RETURN_THROWS(); } - /* Allow microseconds >= 1000000, carry overflow into seconds - * (same behavior as stream_select) */ - ts.tv_sec = (time_t) (timeout_seconds + (timeout_microseconds / 1000000)); - ts.tv_nsec = (long) ((timeout_microseconds % 1000000) * 1000); - timeout = &ts; - } else if (!timeout_seconds_is_null) { - zend_argument_value_error(1, "must be greater than or equal to 0"); - RETURN_THROWS(); + timeout_ts.tv_sec = timeout->duration.seconds; + timeout_ts.tv_nsec = timeout->duration.nanoseconds; } if (max_events_is_null) { @@ -814,12 +805,12 @@ PHP_METHOD(Io_Poll_Context, wait) max_events = 64; } } else if (max_events <= 0) { - zend_argument_value_error(3, "must be greater than 0"); + zend_argument_value_error(2, "must be greater than 0"); RETURN_THROWS(); } php_poll_event *events = safe_emalloc(max_events, sizeof(*events), 0); - int num_events = php_poll_wait(intern->ctx, events, (int) max_events, timeout); + int num_events = php_poll_wait(intern->ctx, events, (int) max_events, timeout ? &timeout_ts : NULL); if (num_events < 0) { php_poll_error err = php_poll_get_error(intern->ctx); diff --git a/ext/standard/io_poll.stub.php b/ext/standard/io_poll.stub.php index 83c1ba5cbe2e..e3bcbf11c871 100644 --- a/ext/standard/io_poll.stub.php +++ b/ext/standard/io_poll.stub.php @@ -86,7 +86,7 @@ public function __construct(Backend $backend = Backend::Auto) {} public function add(Handle $handle, array $events, mixed $data = null): Watcher {} /** @return list */ - public function wait(?int $timeoutSeconds = null, int $timeoutMicroseconds = 0, ?int $maxEvents = null): array {} + public function wait(?\Time\Duration $timeout = null, ?int $maxEvents = null): array {} public function getBackend(): Backend {} } diff --git a/ext/standard/io_poll_arginfo.h b/ext/standard/io_poll_arginfo.h index 5fc62f629564..801df235c26b 100644 --- a/ext/standard/io_poll_arginfo.h +++ b/ext/standard/io_poll_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit io_poll.stub.php instead. - * Stub hash: a7450146c5b3b3f3486611c83a55cf0cc932b27a + * Stub hash: 2f52b00fd6dfc62291e0dd288ffd68547b29bdaa * Has decl header: yes */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Io_Poll_Backend_getAvailableBackends, 0, 0, IS_ARRAY, 0) @@ -56,8 +56,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_Io_Poll_Context_add, 0, 2, ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_Io_Poll_Context_wait, 0, 0, IS_ARRAY, 0) - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeoutSeconds, IS_LONG, 1, "null") - ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, timeoutMicroseconds, IS_LONG, 0, "0") + ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, timeout, Time\\Duration, 1, "null") ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, maxEvents, IS_LONG, 1, "null") ZEND_END_ARG_INFO() diff --git a/ext/standard/io_poll_decl.h b/ext/standard/io_poll_decl.h index 2b09e3665f58..de49880392a7 100644 --- a/ext/standard/io_poll_decl.h +++ b/ext/standard/io_poll_decl.h @@ -1,8 +1,8 @@ /* This is a generated file, edit io_poll.stub.php instead. - * Stub hash: a7450146c5b3b3f3486611c83a55cf0cc932b27a */ + * Stub hash: 2f52b00fd6dfc62291e0dd288ffd68547b29bdaa */ -#ifndef ZEND_IO_POLL_DECL_a7450146c5b3b3f3486611c83a55cf0cc932b27a_H -#define ZEND_IO_POLL_DECL_a7450146c5b3b3f3486611c83a55cf0cc932b27a_H +#ifndef ZEND_IO_POLL_DECL_2f52b00fd6dfc62291e0dd288ffd68547b29bdaa_H +#define ZEND_IO_POLL_DECL_2f52b00fd6dfc62291e0dd288ffd68547b29bdaa_H typedef enum zend_enum_Io_Poll_Backend { ZEND_ENUM_Io_Poll_Backend_Auto = 1, @@ -23,4 +23,4 @@ typedef enum zend_enum_Io_Poll_Event { ZEND_ENUM_Io_Poll_Event_EdgeTriggered = 7, } zend_enum_Io_Poll_Event; -#endif /* ZEND_IO_POLL_DECL_a7450146c5b3b3f3486611c83a55cf0cc932b27a_H */ +#endif /* ZEND_IO_POLL_DECL_2f52b00fd6dfc62291e0dd288ffd68547b29bdaa_H */ diff --git a/ext/standard/tests/poll/poll_stream_sock_modify_write.phpt b/ext/standard/tests/poll/poll_stream_sock_modify_write.phpt index 4f32ec28c88d..3e64d950c19e 100644 --- a/ext/standard/tests/poll/poll_stream_sock_modify_write.phpt +++ b/ext/standard/tests/poll/poll_stream_sock_modify_write.phpt @@ -10,7 +10,7 @@ $poll_ctx = pt_new_stream_poll(); $watcher = pt_stream_poll_add($poll_ctx, $socket2, [Io\Poll\Event::Write], "socket_data"); $watcher->modify([Io\Poll\Event::Write], "modified_data"); -pt_expect_events($poll_ctx->wait(0), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'modified_data'] ]); ?> diff --git a/ext/standard/tests/poll/poll_stream_sock_read.phpt b/ext/standard/tests/poll/poll_stream_sock_read.phpt index 70aebc9cd926..0b44a3d14eac 100644 --- a/ext/standard/tests/poll/poll_stream_sock_read.phpt +++ b/ext/standard/tests/poll/poll_stream_sock_read.phpt @@ -10,7 +10,7 @@ $poll_ctx = pt_new_stream_poll(); pt_stream_poll_add($poll_ctx, $socket1r, [Io\Poll\Event::Read], "socket_data"); fwrite($socket1w, "test data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Read], 'data' => 'socket_data', 'read' => 'test data'] ]); diff --git a/ext/standard/tests/poll/poll_stream_sock_remove_write.phpt b/ext/standard/tests/poll/poll_stream_sock_remove_write.phpt index c5fec5391652..2662a4e1f4c1 100644 --- a/ext/standard/tests/poll/poll_stream_sock_remove_write.phpt +++ b/ext/standard/tests/poll/poll_stream_sock_remove_write.phpt @@ -11,14 +11,14 @@ $poll_ctx = pt_new_stream_poll(); $watcher1w = pt_stream_poll_add($poll_ctx, $socket1w, [Io\Poll\Event::Write], "socket_data_1"); pt_stream_poll_add($poll_ctx, $socket2w, [Io\Poll\Event::Write], "socket_data_2"); -pt_expect_events($poll_ctx->wait(0), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket_data_1'], ['events' => [Io\Poll\Event::Write], 'data' => 'socket_data_2'] ]); $watcher1w->remove(); -pt_expect_events($poll_ctx->wait(0), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket_data_2'] ]); diff --git a/ext/standard/tests/poll/poll_stream_sock_rw_close.phpt b/ext/standard/tests/poll/poll_stream_sock_rw_close.phpt index 3909dea58637..f81ac40bcfab 100644 --- a/ext/standard/tests/poll/poll_stream_sock_rw_close.phpt +++ b/ext/standard/tests/poll/poll_stream_sock_rw_close.phpt @@ -13,7 +13,7 @@ pt_stream_poll_add($poll_ctx, $socket1w, [Io\Poll\Event::Write], "socket2_data") fwrite($socket1w, "test data"); fclose($socket1r); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ [ 'events' => [ 'default' => [Io\Poll\Event::Write, Io\Poll\Event::Error, Io\Poll\Event::HangUp], @@ -28,7 +28,7 @@ pt_expect_events($poll_ctx->wait(0, 100000), [ ], $poll_ctx); fclose($socket1w); -pt_expect_events($poll_ctx->wait(0, 100000), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), []); ?> --EXPECT-- diff --git a/ext/standard/tests/poll/poll_stream_sock_rw_max_events.phpt b/ext/standard/tests/poll/poll_stream_sock_rw_max_events.phpt index d78d3f4fde35..c7374d2986e0 100644 --- a/ext/standard/tests/poll/poll_stream_sock_rw_max_events.phpt +++ b/ext/standard/tests/poll/poll_stream_sock_rw_max_events.phpt @@ -23,14 +23,14 @@ for ($i = 0; $i < 4; $i++) { ]; } -pt_expect_events($poll_ctx->wait(0, 100000, 8), $expected); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000), 8), $expected); // All read data was drained above, so only write events remain $expected = []; for ($i = 0; $i < 4; $i++) { $expected[] = ['events' => [Io\Poll\Event::Write], 'data' => "sock$i"]; } -pt_expect_events($poll_ctx->wait(0, 100000, 8), $expected); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000), 8), $expected); ?> --EXPECT-- diff --git a/ext/standard/tests/poll/poll_stream_sock_rw_multi_edge.phpt b/ext/standard/tests/poll/poll_stream_sock_rw_multi_edge.phpt index f25cb973ddce..63b22bd94941 100644 --- a/ext/standard/tests/poll/poll_stream_sock_rw_multi_edge.phpt +++ b/ext/standard/tests/poll/poll_stream_sock_rw_multi_edge.phpt @@ -15,32 +15,32 @@ $poll_ctx = pt_new_stream_poll(); pt_stream_poll_add($poll_ctx, $socket1r, [Io\Poll\Event::Read, Io\Poll\Event::EdgeTriggered], "socket1_data"); pt_stream_poll_add($poll_ctx, $socket1w, [Io\Poll\Event::Write, Io\Poll\Event::EdgeTriggered], "socket2_data"); -pt_expect_events($poll_ctx->wait(0), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket2_data'] ]); -pt_expect_events($poll_ctx->wait(0), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), []); fwrite($socket1w, "test data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Read], 'data' => 'socket1_data', 'read' => 'test data'] ]); fwrite($socket1w, "more data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket2_data'], ['events' => [Io\Poll\Event::Read], 'data' => 'socket1_data'] ]); -pt_expect_events($poll_ctx->wait(0, 100000), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), []); fwrite($socket1w, " and even more data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Read], 'data' => 'socket1_data', 'read' => 'more data and even more data'] ]); fclose($socket1r); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ [ 'events' => ['default' => [Io\Poll\Event::Write, Io\Poll\Event::HangUp]], 'data' => 'socket2_data' @@ -48,7 +48,7 @@ pt_expect_events($poll_ctx->wait(0, 100000), [ ], $poll_ctx); fclose($socket1w); -pt_expect_events($poll_ctx->wait(0, 100000), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), []); ?> --EXPECT-- diff --git a/ext/standard/tests/poll/poll_stream_sock_rw_multi_level.phpt b/ext/standard/tests/poll/poll_stream_sock_rw_multi_level.phpt index 8bc8ea7fcc3d..639420872614 100644 --- a/ext/standard/tests/poll/poll_stream_sock_rw_multi_level.phpt +++ b/ext/standard/tests/poll/poll_stream_sock_rw_multi_level.phpt @@ -10,39 +10,39 @@ $poll_ctx = pt_new_stream_poll(); pt_stream_poll_add($poll_ctx, $socket1r, [Io\Poll\Event::Read], "socket1_data"); pt_stream_poll_add($poll_ctx, $socket1w, [Io\Poll\Event::Write], "socket2_data"); -pt_expect_events($poll_ctx->wait(0), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket2_data'] ]); -pt_expect_events($poll_ctx->wait(0), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket2_data'] ]); fwrite($socket1w, "test data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket2_data'], ['events' => [Io\Poll\Event::Read], 'data' => 'socket1_data', 'read' => 'test data'] ]); fwrite($socket1w, "more data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket2_data'], ['events' => [Io\Poll\Event::Read], 'data' => 'socket1_data'] ]); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket2_data'], ['events' => [Io\Poll\Event::Read], 'data' => 'socket1_data'] ]); fwrite($socket1w, " and even more data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket2_data'], ['events' => [Io\Poll\Event::Read], 'data' => 'socket1_data', 'read' => 'more data and even more data'] ]); fclose($socket1r); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ [ 'events' => [ 'default' => [Io\Poll\Event::Write, Io\Poll\Event::HangUp], @@ -56,7 +56,7 @@ pt_expect_events($poll_ctx->wait(0, 100000), [ ], $poll_ctx); fclose($socket1w); -pt_expect_events($poll_ctx->wait(0, 100000), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), []); ?> --EXPECT-- diff --git a/ext/standard/tests/poll/poll_stream_sock_rw_single_edge.phpt b/ext/standard/tests/poll/poll_stream_sock_rw_single_edge.phpt index 4a7b67b8243f..29432b7f95af 100644 --- a/ext/standard/tests/poll/poll_stream_sock_rw_single_edge.phpt +++ b/ext/standard/tests/poll/poll_stream_sock_rw_single_edge.phpt @@ -15,11 +15,11 @@ $poll_ctx = pt_new_stream_poll(); pt_stream_poll_add($poll_ctx, $socket1r, [Io\Poll\Event::Read, Io\Poll\Event::EdgeTriggered], "socket1_data"); pt_stream_poll_add($poll_ctx, $socket1w, [Io\Poll\Event::Write, Io\Poll\Event::EdgeTriggered], "socket2_data"); -pt_expect_events($poll_ctx->wait(0), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket2_data'] ]); fwrite($socket1w, "test data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Read], 'data' => 'socket1_data', 'read' => 'test data'] ]); diff --git a/ext/standard/tests/poll/poll_stream_sock_rw_single_level.phpt b/ext/standard/tests/poll/poll_stream_sock_rw_single_level.phpt index a807e573c5fe..f0a64fc06387 100644 --- a/ext/standard/tests/poll/poll_stream_sock_rw_single_level.phpt +++ b/ext/standard/tests/poll/poll_stream_sock_rw_single_level.phpt @@ -10,11 +10,11 @@ $poll_ctx = pt_new_stream_poll(); pt_stream_poll_add($poll_ctx, $socket1r, [Io\Poll\Event::Read], "socket1_data"); pt_stream_poll_add($poll_ctx, $socket1w, [Io\Poll\Event::Write], "socket2_data"); -pt_expect_events($poll_ctx->wait(0), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket2_data'] ]); fwrite($socket1w, "test data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket2_data'], ['events' => [Io\Poll\Event::Read], 'data' => 'socket1_data', 'read' => 'test data'] ]); diff --git a/ext/standard/tests/poll/poll_stream_sock_write.phpt b/ext/standard/tests/poll/poll_stream_sock_write.phpt index 2d937d7e9a3b..1bfb0524ec87 100644 --- a/ext/standard/tests/poll/poll_stream_sock_write.phpt +++ b/ext/standard/tests/poll/poll_stream_sock_write.phpt @@ -9,7 +9,7 @@ $poll_ctx = pt_new_stream_poll(); pt_stream_poll_add($poll_ctx, $socket1w, [Io\Poll\Event::Write], "socket_data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'socket_data'] ]); diff --git a/ext/standard/tests/poll/poll_stream_sock_write_close.phpt b/ext/standard/tests/poll/poll_stream_sock_write_close.phpt index 8927e017b05d..49e452907f20 100644 --- a/ext/standard/tests/poll/poll_stream_sock_write_close.phpt +++ b/ext/standard/tests/poll/poll_stream_sock_write_close.phpt @@ -13,7 +13,7 @@ pt_stream_poll_add($poll_ctx, $socket2w, [Io\Poll\Event::Write], "socket2w_data" fclose($socket1w); fclose($socket2w); -pt_expect_events($poll_ctx->wait(0, 100000), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), []); ?> --EXPECT-- diff --git a/ext/standard/tests/poll/poll_stream_tcp_read.phpt b/ext/standard/tests/poll/poll_stream_tcp_read.phpt index 71c7af0ca734..e9296a266e04 100644 --- a/ext/standard/tests/poll/poll_stream_tcp_read.phpt +++ b/ext/standard/tests/poll/poll_stream_tcp_read.phpt @@ -10,7 +10,7 @@ $poll_ctx = pt_new_stream_poll(); pt_stream_poll_add($poll_ctx, $socket1r, [Io\Poll\Event::Read], "socket_data"); pt_write_sleep($socket1w, "test data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Read], 'data' => 'socket_data', 'read' => 'test data'] ]); diff --git a/ext/standard/tests/poll/poll_stream_tcp_read_max_events.phpt b/ext/standard/tests/poll/poll_stream_tcp_read_max_events.phpt index f927e73ed4d3..bb2c734cbf2c 100644 --- a/ext/standard/tests/poll/poll_stream_tcp_read_max_events.phpt +++ b/ext/standard/tests/poll/poll_stream_tcp_read_max_events.phpt @@ -19,7 +19,7 @@ for ($i = 0; $i < count($clients); $i++) { // events must be delivered by the following wait() without any duplicates. $seen = []; for ($round = 1; $round <= 2; $round++) { - $watchers = $poll_ctx->wait(0, 100000, 4); + $watchers = $poll_ctx->wait(Time\Duration::fromMicroseconds(100000), 4); echo "Round $round count: " . count($watchers) . "\n"; foreach ($watchers as $watcher) { $data = $watcher->getData(); @@ -35,7 +35,7 @@ for ($round = 1; $round <= 2; $round++) { ksort($seen); echo "Seen: " . implode(',', array_keys($seen)) . "\n"; -pt_expect_events($poll_ctx->wait(0), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), []); ?> --EXPECT-- diff --git a/ext/standard/tests/poll/poll_stream_tcp_read_multiple_level.phpt b/ext/standard/tests/poll/poll_stream_tcp_read_multiple_level.phpt index db2ff71fb7c8..bc49571ca8ef 100644 --- a/ext/standard/tests/poll/poll_stream_tcp_read_multiple_level.phpt +++ b/ext/standard/tests/poll/poll_stream_tcp_read_multiple_level.phpt @@ -11,7 +11,7 @@ for ($i = 0; $i < count($servers); $i++) { pt_stream_poll_add($poll_ctx, $servers[$i], [Io\Poll\Event::Read], "server{$i}_data"); } -pt_expect_events($poll_ctx->wait(0), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), []); for ($i = 0; $i < count($clients); $i++) { pt_write_sleep($clients[$i], "test $i data"); @@ -22,16 +22,16 @@ $expected_events = []; for ($i = 0; $i < 20; $i++) { $expected_events[] = ['events' => [Io\Poll\Event::Read], 'data' => "server{$i}_data", 'read' => "test $i data"]; } -pt_expect_events($poll_ctx->wait(0, 100000), $expected_events); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), $expected_events); pt_write_sleep($clients[1], "more data"); pt_write_sleep($clients[2], "more data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Read], 'data' => 'server1_data', 'read' => 'more data'], ['events' => [Io\Poll\Event::Read], 'data' => 'server2_data', 'read' => 'more data'] ]); -pt_expect_events($poll_ctx->wait(0, 100000), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), []); ?> --EXPECT-- diff --git a/ext/standard/tests/poll/poll_stream_tcp_read_one_shot.phpt b/ext/standard/tests/poll/poll_stream_tcp_read_one_shot.phpt index 02db6355ca1a..c8f7c424b3dc 100644 --- a/ext/standard/tests/poll/poll_stream_tcp_read_one_shot.phpt +++ b/ext/standard/tests/poll/poll_stream_tcp_read_one_shot.phpt @@ -13,18 +13,18 @@ pt_stream_poll_add($poll_ctx, $server1, [Io\Poll\Event::Read, Io\Poll\Event::One pt_stream_poll_add($poll_ctx, $client2, [Io\Poll\Event::Read, Io\Poll\Event::OneShot], "client2_data"); pt_stream_poll_add($poll_ctx, $server2, [Io\Poll\Event::Read, Io\Poll\Event::OneShot], "server2_data"); -pt_expect_events($poll_ctx->wait(0), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), []); pt_write_sleep($client1, "test data"); pt_write_sleep($client2, "test data"); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Read], 'data' => 'server1_data', 'read' => 'test data'], ['events' => [Io\Poll\Event::Read], 'data' => 'server2_data', 'read' => 'test data'] ]); pt_write_sleep($client1, "more data"); pt_write_sleep($client2, "more data"); -pt_expect_events($poll_ctx->wait(0, 100000), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), []); ?> --EXPECT-- diff --git a/ext/standard/tests/poll/poll_stream_tcp_read_one_shot_max_events.phpt b/ext/standard/tests/poll/poll_stream_tcp_read_one_shot_max_events.phpt index d7a2e48be6f4..73142b16f636 100644 --- a/ext/standard/tests/poll/poll_stream_tcp_read_one_shot_max_events.phpt +++ b/ext/standard/tests/poll/poll_stream_tcp_read_one_shot_max_events.phpt @@ -20,7 +20,7 @@ for ($i = 0; $i < count($clients); $i++) { // them, and each oneshot event must be delivered exactly once. $seen = []; for ($round = 1; $round <= 2; $round++) { - $watchers = $poll_ctx->wait(0, 100000, 4); + $watchers = $poll_ctx->wait(Time\Duration::fromMicroseconds(100000), 4); echo "Round $round count: " . count($watchers) . "\n"; foreach ($watchers as $watcher) { $data = $watcher->getData(); @@ -36,7 +36,7 @@ echo "Seen: " . implode(',', array_keys($seen)) . "\n"; // Every oneshot watcher fired once, so new data must not be reported pt_write_sleep($clients[0], "more data"); -pt_expect_events($poll_ctx->wait(0, 100000), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), []); ?> --EXPECT-- diff --git a/ext/standard/tests/poll/poll_stream_tcp_rw_one_shot.phpt b/ext/standard/tests/poll/poll_stream_tcp_rw_one_shot.phpt index 6132975e1b50..79db5608b974 100644 --- a/ext/standard/tests/poll/poll_stream_tcp_rw_one_shot.phpt +++ b/ext/standard/tests/poll/poll_stream_tcp_rw_one_shot.phpt @@ -10,16 +10,16 @@ $poll_ctx = pt_new_stream_poll(); pt_stream_poll_add($poll_ctx, $client, [Io\Poll\Event::Read, Io\Poll\Event::Write, Io\Poll\Event::OneShot], "client_data"); pt_stream_poll_add($poll_ctx, $server, [Io\Poll\Event::Read, Io\Poll\Event::Write, Io\Poll\Event::OneShot], "server_data"); -pt_expect_events($poll_ctx->wait(0), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'client_data'], ['events' => [Io\Poll\Event::Write], 'data' => 'server_data'] ]); pt_write_sleep($client, "test data"); -pt_expect_events($poll_ctx->wait(0, 100000), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), []); pt_write_sleep($client, "test data"); -pt_expect_events($poll_ctx->wait(0, 100000), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), []); ?> --EXPECT-- diff --git a/ext/standard/tests/poll/poll_stream_tcp_rw_one_shot_mixed.phpt b/ext/standard/tests/poll/poll_stream_tcp_rw_one_shot_mixed.phpt index c480caf1b73d..b8646f252e70 100644 --- a/ext/standard/tests/poll/poll_stream_tcp_rw_one_shot_mixed.phpt +++ b/ext/standard/tests/poll/poll_stream_tcp_rw_one_shot_mixed.phpt @@ -11,13 +11,13 @@ pt_stream_poll_add($poll_ctx, $client, [Io\Poll\Event::Read, Io\Poll\Event::Writ pt_stream_poll_add($poll_ctx, $server, [Io\Poll\Event::Read, Io\Poll\Event::Write, Io\Poll\Event::OneShot], "server_data"); pt_write_sleep($client, "test data"); -pt_expect_events($poll_ctx->wait(0), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'client_data'], ['events' => [Io\Poll\Event::Read, Io\Poll\Event::Write], 'data' => 'server_data'] ]); pt_write_sleep($client, "test data"); -pt_expect_events($poll_ctx->wait(0, 100000), []); +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), []); ?> --EXPECT-- diff --git a/ext/standard/tests/poll/poll_stream_tcp_rw_single_level.phpt b/ext/standard/tests/poll/poll_stream_tcp_rw_single_level.phpt index f29a74f19edd..9300e2266f37 100644 --- a/ext/standard/tests/poll/poll_stream_tcp_rw_single_level.phpt +++ b/ext/standard/tests/poll/poll_stream_tcp_rw_single_level.phpt @@ -10,14 +10,14 @@ $poll_ctx = pt_new_stream_poll(); pt_stream_poll_add($poll_ctx, $client, [Io\Poll\Event::Read, Io\Poll\Event::Write], "client_data"); pt_stream_poll_add($poll_ctx, $server, [Io\Poll\Event::Read, Io\Poll\Event::Write], "server_data"); -pt_expect_events($poll_ctx->wait(0), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromSeconds(0)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'client_data'], ['events' => [Io\Poll\Event::Write], 'data' => 'server_data'] ]); fwrite($client, "test data"); usleep(10000); -pt_expect_events($poll_ctx->wait(0, 100000), [ +pt_expect_events($poll_ctx->wait(Time\Duration::fromMicroseconds(100000)), [ ['events' => [Io\Poll\Event::Write], 'data' => 'client_data'], ['events' => [Io\Poll\Event::Read, Io\Poll\Event::Write], 'data' => 'server_data', 'read' => 'test data'] ]); diff --git a/ext/standard/tests/poll/poll_stream_wait_no_add.phpt b/ext/standard/tests/poll/poll_stream_wait_no_add.phpt index a297fa5e1162..14789d709f6b 100644 --- a/ext/standard/tests/poll/poll_stream_wait_no_add.phpt +++ b/ext/standard/tests/poll/poll_stream_wait_no_add.phpt @@ -4,7 +4,7 @@ Poll stream - only wait wait(0, 100000); +$events = $poll_ctx->wait(Time\Duration::fromMicroseconds(100000)); pt_print_events($events); ?>