summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/test_threadpool.c38
1 files changed, 36 insertions, 2 deletions
diff --git a/tests/test_threadpool.c b/tests/test_threadpool.c
index afb981be6..d8acf26f9 100644
--- a/tests/test_threadpool.c
+++ b/tests/test_threadpool.c
@@ -921,6 +921,41 @@ end:
return res;
}
+static enum ast_test_result_state wait_until_thread_state_task_pushed(struct ast_test *test,
+ struct test_listener_data *tld, int num_active, int num_idle, int num_tasks)
+{
+ enum ast_test_result_state res = AST_TEST_PASS;
+ struct timeval start;
+ struct timespec end;
+
+ res = wait_until_thread_state(test, tld, num_active, num_idle);
+ if (res == AST_TEST_FAIL) {
+ return res;
+ }
+
+ start = ast_tvnow();
+ end.tv_sec = start.tv_sec + 5;
+ end.tv_nsec = start.tv_usec * 1000;
+
+ ast_mutex_lock(&tld->lock);
+
+ while (tld->num_tasks != num_tasks) {
+ if (ast_cond_timedwait(&tld->cond, &tld->lock, &end) == ETIMEDOUT) {
+ break;
+ }
+ }
+
+ if (tld->num_tasks != num_tasks) {
+ ast_test_status_update(test, "Number of tasks pushed %d does not match expected %d\n",
+ tld->num_tasks, num_tasks);
+ res = AST_TEST_FAIL;
+ }
+
+ ast_mutex_unlock(&tld->lock);
+
+ return res;
+}
+
AST_TEST_DEFINE(threadpool_auto_increment)
{
struct ast_threadpool *pool = NULL;
@@ -1021,11 +1056,10 @@ AST_TEST_DEFINE(threadpool_auto_increment)
goto end;
}
- res = wait_until_thread_state(test, tld, 0, 3);
+ res = wait_until_thread_state_task_pushed(test, tld, 0, 3, 4);
if (res == AST_TEST_FAIL) {
goto end;
}
- res = listener_check(test, listener, 1, 0, 4, 0, 3, 1);
end:
ast_threadpool_shutdown(pool);