diff options
author | Jeff Trawick <trawick@apache.org> | 2011-04-06 12:51:17 +0000 |
---|---|---|
committer | Jeff Trawick <trawick@apache.org> | 2011-04-06 12:51:17 +0000 |
commit | 507e014a790fc1e7a30ff608597b4874391fc876 (patch) | |
tree | 752d50d6a0624d9273e3829b8a47dbc4c5bb2c37 /test/testpoll.c | |
parent | d2c3f651c563c126fd6acc38df9d86890ad0dff3 (diff) | |
download | apr-507e014a790fc1e7a30ff608597b4874391fc876.tar.gz |
poll, pollset, pollcb on Windows: Handle calls with no file/socket
descriptors.
PR: 49882
Patch for one situation submitted by: Stefan Ruppert <sr myarm.com>
Extended by: trawick
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1089433 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'test/testpoll.c')
-rw-r--r-- | test/testpoll.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/test/testpoll.c b/test/testpoll.c index ab31a3deb..6a247fffe 100644 --- a/test/testpoll.c +++ b/test/testpoll.c @@ -819,6 +819,69 @@ static void pollcb_wakeup(abts_case *tc, void *data) ABTS_INT_EQUAL(tc, APR_EINTR, rv); } +static void justsleep(abts_case *tc, void *data) +{ + apr_int32_t nsds; + const apr_pollfd_t *hot_files; + apr_pollset_t *pollset; + apr_status_t rv; + apr_time_t t1, t2; + int i; + apr_pollset_method_e methods[] = { + APR_POLLSET_DEFAULT, + APR_POLLSET_SELECT, + APR_POLLSET_KQUEUE, + APR_POLLSET_PORT, + APR_POLLSET_EPOLL, + APR_POLLSET_POLL}; + + nsds = 1; + t1 = apr_time_now(); + rv = apr_poll(NULL, 0, &nsds, apr_time_from_msec(200)); + t2 = apr_time_now(); + ABTS_INT_EQUAL(tc, 1, APR_STATUS_IS_TIMEUP(rv)); + ABTS_INT_EQUAL(tc, 0, nsds); + ABTS_ASSERT(tc, + "apr_poll() didn't sleep", + (t2 - t1) > apr_time_from_msec(100)); + + for (i = 0; i < sizeof methods / sizeof methods[0]; i++) { + rv = apr_pollset_create_ex(&pollset, 5, p, 0, methods[i]); + if (rv != APR_ENOTIMPL) { + ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); + + nsds = 1; + t1 = apr_time_now(); + rv = apr_pollset_poll(pollset, apr_time_from_msec(200), &nsds, + &hot_files); + t2 = apr_time_now(); + ABTS_INT_EQUAL(tc, 1, APR_STATUS_IS_TIMEUP(rv)); + ABTS_INT_EQUAL(tc, 0, nsds); + ABTS_ASSERT(tc, + "apr_pollset_poll() didn't sleep", + (t2 - t1) > apr_time_from_msec(100)); + + rv = apr_pollset_destroy(pollset); + ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); + } + + rv = apr_pollcb_create_ex(&pollcb, 5, p, 0, methods[0]); + if (rv != APR_ENOTIMPL) { + ABTS_INT_EQUAL(tc, APR_SUCCESS, rv); + + t1 = apr_time_now(); + rv = apr_pollcb_poll(pollcb, apr_time_from_msec(200), NULL, NULL); + t2 = apr_time_now(); + ABTS_INT_EQUAL(tc, 1, APR_STATUS_IS_TIMEUP(rv)); + ABTS_ASSERT(tc, + "apr_pollcb_poll() didn't sleep", + (t2 - t1) > apr_time_from_msec(100)); + + /* no apr_pollcb_destroy() */ + } + } +} + abts_suite *testpoll(abts_suite *suite) { suite = ADD_SUITE(suite) @@ -858,6 +921,7 @@ abts_suite *testpoll(abts_suite *suite) abts_run_test(suite, close_all_sockets, NULL); abts_run_test(suite, pollset_default, NULL); abts_run_test(suite, pollcb_default, NULL); + abts_run_test(suite, justsleep, NULL); abts_run_test(suite, pollset_wakeup, NULL); abts_run_test(suite, pollcb_wakeup, NULL); |