Skip to content
This repository has been archived by the owner on May 4, 2018. It is now read-only.

Commit

Permalink
unix: remove eio_set_max_poll_reqs
Browse files Browse the repository at this point in the history
* added test
  • Loading branch information
indutny authored and bnoordhuis committed Jan 16, 2012
1 parent 2651273 commit e7758e1
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 5 deletions.
5 changes: 0 additions & 5 deletions src/unix/uv-eio.c
Expand Up @@ -98,11 +98,6 @@ static void uv_eio_done_poll(eio_channel *channel) {

static void uv__eio_init(void) {
eio_init(uv_eio_want_poll, uv_eio_done_poll);
/*
* Don't handle more than 10 reqs on each eio_poll(). This is to avoid
* race conditions. See Node's test/simple/test-eio-race.js
*/
eio_set_max_poll_reqs(10);
}

static uv_once_t uv__eio_init_once_guard = UV_ONCE_INIT;
Expand Down
88 changes: 88 additions & 0 deletions test/test-eio-overflow.c
@@ -0,0 +1,88 @@
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
* deal in the Software without restriction, including without limitation the
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
* sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/

#include "uv.h"
#include "task.h"
#include <stdio.h>
#include <stdlib.h>


static uv_idle_t idle;

static const int max_opened = 10000;
static const int max_delta = 4000;

static int opened = 0;
static int closed = 0;


void work_cb(uv_work_t* work) {
/* continue as fast as possible */
}


void after_work_cb(uv_work_t* work) {
free(work);
closed++;
}


void make_eio_req(void) {
opened++;

uv_work_t* w = (uv_work_t*) malloc(sizeof(*w));
ASSERT(w != NULL);

uv_queue_work(uv_default_loop(), w, work_cb, after_work_cb);
}


void idle_cb(uv_idle_t* idle, int status) {
ASSERT(opened - closed < max_delta);
if (opened <= max_opened) {
int i;
for (i = 0; i < 30; i++) {
make_eio_req();
}
} else {
int r;

r = uv_idle_stop(idle);
uv_unref(uv_default_loop());
ASSERT(r == 0);
}
}


TEST_IMPL(eio_overflow) {
int r;

r = uv_idle_init(uv_default_loop(), &idle);
ASSERT(r == 0);

r = uv_idle_start(&idle, idle_cb);
ASSERT(r == 0);

r = uv_run(uv_default_loop());
ASSERT(r == 0);

return 0;
}
2 changes: 2 additions & 0 deletions test/test-list.h
Expand Up @@ -122,6 +122,7 @@ TEST_DECLARE (fs_open_dir)
TEST_DECLARE (fs_rename_to_existing_file)
TEST_DECLARE (threadpool_queue_work_simple)
TEST_DECLARE (threadpool_multiple_event_loops)
TEST_DECLARE (eio_overflow)
TEST_DECLARE (thread_mutex)
TEST_DECLARE (thread_rwlock)
TEST_DECLARE (thread_create)
Expand Down Expand Up @@ -290,6 +291,7 @@ TASK_LIST_START
TEST_ENTRY (fs_rename_to_existing_file)
TEST_ENTRY (threadpool_queue_work_simple)
TEST_ENTRY (threadpool_multiple_event_loops)
TEST_ENTRY (eio_overflow)
TEST_ENTRY (thread_mutex)
TEST_ENTRY (thread_rwlock)
TEST_ENTRY (thread_create)
Expand Down
1 change: 1 addition & 0 deletions uv.gyp
Expand Up @@ -284,6 +284,7 @@
'test/test-connection-fail.c',
'test/test-cwd-and-chdir.c',
'test/test-delayed-accept.c',
'test/test-eio-overflow.c',
'test/test-fail-always.c',
'test/test-fs.c',
'test/test-fs-event.c',
Expand Down

0 comments on commit e7758e1

Please sign in to comment.