forked from cory/tildefriends
libuv 1.47.0.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4615 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
64
deps/libuv/test/test-signal-multiple-loops.c
vendored
64
deps/libuv/test/test-signal-multiple-loops.c
vendored
@@ -66,14 +66,14 @@ static void increment_counter(int* counter) {
|
||||
|
||||
|
||||
static void signal1_cb(uv_signal_t* handle, int signum) {
|
||||
ASSERT(signum == SIGUSR1);
|
||||
ASSERT_EQ(signum, SIGUSR1);
|
||||
increment_counter(&signal1_cb_counter);
|
||||
uv_signal_stop(handle);
|
||||
}
|
||||
|
||||
|
||||
static void signal2_cb(uv_signal_t* handle, int signum) {
|
||||
ASSERT(signum == SIGUSR2);
|
||||
ASSERT_EQ(signum, SIGUSR2);
|
||||
increment_counter(&signal2_cb_counter);
|
||||
uv_signal_stop(handle);
|
||||
}
|
||||
@@ -89,25 +89,25 @@ static void signal_handling_worker(void* context) {
|
||||
|
||||
action = (enum signal_action) (uintptr_t) context;
|
||||
|
||||
ASSERT(0 == uv_loop_init(&loop));
|
||||
ASSERT_OK(uv_loop_init(&loop));
|
||||
|
||||
/* Setup the signal watchers and start them. */
|
||||
if (action == ONLY_SIGUSR1 || action == SIGUSR1_AND_SIGUSR2) {
|
||||
r = uv_signal_init(&loop, &signal1a);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
r = uv_signal_start(&signal1a, signal1_cb, SIGUSR1);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
r = uv_signal_init(&loop, &signal1b);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
r = uv_signal_start(&signal1b, signal1_cb, SIGUSR1);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
}
|
||||
|
||||
if (action == ONLY_SIGUSR2 || action == SIGUSR1_AND_SIGUSR2) {
|
||||
r = uv_signal_init(&loop, &signal2);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
r = uv_signal_start(&signal2, signal2_cb, SIGUSR2);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
}
|
||||
|
||||
/* Signal watchers are now set up. */
|
||||
@@ -117,26 +117,26 @@ static void signal_handling_worker(void* context) {
|
||||
* will return when all signal watchers caught a signal.
|
||||
*/
|
||||
r = uv_run(&loop, UV_RUN_DEFAULT);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
/* Restart the signal watchers. */
|
||||
if (action == ONLY_SIGUSR1 || action == SIGUSR1_AND_SIGUSR2) {
|
||||
r = uv_signal_start(&signal1a, signal1_cb, SIGUSR1);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
r = uv_signal_start(&signal1b, signal1_cb, SIGUSR1);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
}
|
||||
|
||||
if (action == ONLY_SIGUSR2 || action == SIGUSR1_AND_SIGUSR2) {
|
||||
r = uv_signal_start(&signal2, signal2_cb, SIGUSR2);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
}
|
||||
|
||||
/* Wait for signals once more. */
|
||||
uv_sem_post(&sem);
|
||||
|
||||
r = uv_run(&loop, UV_RUN_DEFAULT);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
/* Close the watchers. */
|
||||
if (action == ONLY_SIGUSR1 || action == SIGUSR1_AND_SIGUSR2) {
|
||||
@@ -150,7 +150,7 @@ static void signal_handling_worker(void* context) {
|
||||
|
||||
/* Wait for the signal watchers to close. */
|
||||
r = uv_run(&loop, UV_RUN_DEFAULT);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
uv_loop_close(&loop);
|
||||
}
|
||||
@@ -173,18 +173,18 @@ static void loop_creating_worker(void* context) {
|
||||
|
||||
loop = malloc(sizeof(*loop));
|
||||
ASSERT_NOT_NULL(loop);
|
||||
ASSERT(0 == uv_loop_init(loop));
|
||||
ASSERT_OK(uv_loop_init(loop));
|
||||
|
||||
r = uv_signal_init(loop, &signal);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
r = uv_signal_start(&signal, signal_unexpected_cb, SIGTERM);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
uv_close((uv_handle_t*) &signal, NULL);
|
||||
|
||||
r = uv_run(loop, UV_RUN_DEFAULT);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
uv_loop_close(loop);
|
||||
free(loop);
|
||||
@@ -229,17 +229,17 @@ TEST_IMPL(signal_multiple_loops) {
|
||||
int r;
|
||||
|
||||
r = uv_sem_init(&sem, 0);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
r = uv_mutex_init(&lock);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
/* Create a couple of threads that create a destroy loops continuously. */
|
||||
for (i = 0; i < NUM_LOOP_CREATING_THREADS; i++) {
|
||||
r = uv_thread_create(&loop_creating_threads[i],
|
||||
loop_creating_worker,
|
||||
NULL);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
}
|
||||
|
||||
/* Create a couple of threads that actually handle signals. */
|
||||
@@ -253,7 +253,7 @@ TEST_IMPL(signal_multiple_loops) {
|
||||
r = uv_thread_create(&signal_handling_threads[i],
|
||||
signal_handling_worker,
|
||||
(void*) (uintptr_t) action);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
}
|
||||
|
||||
/* Wait until all threads have started and set up their signal watchers. */
|
||||
@@ -261,9 +261,9 @@ TEST_IMPL(signal_multiple_loops) {
|
||||
uv_sem_wait(&sem);
|
||||
|
||||
r = kill(getpid(), SIGUSR1);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
r = kill(getpid(), SIGUSR2);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
/* Wait for all threads to handle these signals. */
|
||||
for (i = 0; i < NUM_SIGNAL_HANDLING_THREADS; i++)
|
||||
@@ -277,14 +277,14 @@ TEST_IMPL(signal_multiple_loops) {
|
||||
pthread_sigmask(SIG_SETMASK, &sigset, NULL);
|
||||
|
||||
r = kill(getpid(), SIGUSR1);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
r = kill(getpid(), SIGUSR2);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
|
||||
/* Wait for all signal handling threads to exit. */
|
||||
for (i = 0; i < NUM_SIGNAL_HANDLING_THREADS; i++) {
|
||||
r = uv_thread_join(&signal_handling_threads[i]);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
}
|
||||
|
||||
/* Tell all loop creating threads to stop. */
|
||||
@@ -295,7 +295,7 @@ TEST_IMPL(signal_multiple_loops) {
|
||||
/* Wait for all loop creating threads to exit. */
|
||||
for (i = 0; i < NUM_LOOP_CREATING_THREADS; i++) {
|
||||
r = uv_thread_join(&loop_creating_threads[i]);
|
||||
ASSERT(r == 0);
|
||||
ASSERT_OK(r);
|
||||
}
|
||||
|
||||
uv_sem_destroy(&sem);
|
||||
@@ -306,13 +306,13 @@ TEST_IMPL(signal_multiple_loops) {
|
||||
/* The division by three reflects the fact that we spawn three different
|
||||
* thread groups of (NUM_SIGNAL_HANDLING_THREADS / 3) threads each.
|
||||
*/
|
||||
ASSERT(signal1_cb_counter == 8 * (NUM_SIGNAL_HANDLING_THREADS / 3));
|
||||
ASSERT(signal2_cb_counter == 4 * (NUM_SIGNAL_HANDLING_THREADS / 3));
|
||||
ASSERT_EQ(signal1_cb_counter, 8 * (NUM_SIGNAL_HANDLING_THREADS / 3));
|
||||
ASSERT_EQ(signal2_cb_counter, 4 * (NUM_SIGNAL_HANDLING_THREADS / 3));
|
||||
|
||||
/* We don't know exactly how much loops will be created and destroyed, but at
|
||||
* least there should be 1 for every loop creating thread.
|
||||
*/
|
||||
ASSERT(loop_creation_counter >= NUM_LOOP_CREATING_THREADS);
|
||||
ASSERT_GE(loop_creation_counter, NUM_LOOP_CREATING_THREADS);
|
||||
|
||||
MAKE_VALGRIND_HAPPY(uv_default_loop());
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user