Implement tryadd, adding itmes with a timeout

This commit is contained in:
Nils O. Selåsdal
2013-01-02 16:54:20 +01:00
parent dbe91d2d13
commit 3e7fd8a34b
3 changed files with 99 additions and 6 deletions
+62
View File
@@ -55,6 +55,8 @@ START_TEST (test_thread_queue_one_thread)
END_TEST
//pretty ugly..
static int test_thread_queue_walk_global;
static void test_thread_queue_walk_func(struct uc_threadmsg *msg)
@@ -253,6 +255,63 @@ START_TEST (test_thread_queue_timeout2)
END_TEST
START_TEST (test_thread_queue_tryadd_timeout_0_0)
struct uc_threadqueue queue;
int i;
struct thr_msg msg[3];
memset(msg, 0, sizeof msg);
struct timespec timeout = {0,0};
fail_if(uc_thread_queue_init(&queue, 2) != 0);
for (i = 0; i < 2; i++) {
fail_if(uc_thread_queue_add(&queue, &msg[i].msg) != 0);
}
fail_if(uc_thread_queue_tryadd(&queue, &timeout, &msg[2].msg) != ETIMEDOUT);
fail_if(uc_thread_queue_destroy(&queue, NULL) != 0);
END_TEST
START_TEST (test_thread_queue_tryadd_timeout_0_100)
struct uc_threadqueue queue;
int i;
struct thr_msg msg[3];
memset(msg, 0, sizeof msg);
struct timespec timeout = {0,100};
fail_if(uc_thread_queue_init(&queue, 2) != 0);
for (i = 0; i < 2; i++) {
fail_if(uc_thread_queue_add(&queue, &msg[i].msg) != 0);
}
fail_if(uc_thread_queue_tryadd(&queue, &timeout, &msg[2].msg) != ETIMEDOUT);
fail_if(uc_thread_queue_destroy(&queue, NULL) != 0);
END_TEST
START_TEST (test_thread_queue_tryadd_no_timeout_0_100)
struct uc_threadqueue queue;
int i;
struct thr_msg msg[3];
memset(msg, 0, sizeof msg);
struct timespec timeout = {0,100};
fail_if(uc_thread_queue_init(&queue, 3) != 0);
for (i = 0; i < 2; i++) {
fail_if(uc_thread_queue_add(&queue, &msg[i].msg) != 0);
}
fail_if(uc_thread_queue_tryadd(&queue, &timeout, &msg[2].msg) != 0);
fail_if(uc_thread_queue_destroy(&queue, NULL) != 0);
END_TEST
Suite *threadqueue_suite(void)
{
@@ -268,6 +327,9 @@ Suite *threadqueue_suite(void)
tcase_add_test(tc1, test_thread_queue_multiple_writers);
tcase_add_test(tc1, test_thread_queue_timeout1);
tcase_add_test(tc1, test_thread_queue_timeout2);
tcase_add_test(tc1, test_thread_queue_tryadd_timeout_0_0);
tcase_add_test(tc1, test_thread_queue_tryadd_timeout_0_100);
tcase_add_test(tc1, test_thread_queue_tryadd_no_timeout_0_100);
//lets start with this:
tcase_set_timeout(tc1, 15);