]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
test_time: Provide a timeout when waiting. 06/2006/1
authorJoshua Colp <jcolp@digium.com>
Mon, 28 Dec 2015 20:02:19 +0000 (16:02 -0400)
committerJoshua Colp <jcolp@digium.com>
Wed, 13 Jan 2016 21:23:18 +0000 (15:23 -0600)
The test_timezone_watch unit test is written to expect a
condition to be signaled when the inotify daemon thread runs.
There exists a small window where the test_timezone_watch
thread can signal the inotify daemon thread while it is not
reading on the underlying file descriptor. If this occurs
the test_timezone_watch thread will wait indefinitely for a
signal that will never arrive.

This change adds a timeout to the condition so it will return
regardless after a period of time.

Change-Id: Ifed981879df6de3d93acd3ee0a70f92546517390
(cherry picked from commit c8499b8d5adc805efadb91b483d9d987f62891ff)

main/stdtime/localtime.c

index b2745d919f7d358f291f7bd8b8ea29791b8e2f97..b12b54fa089adcaae23cc49755786b925b62b442 100644 (file)
@@ -625,13 +625,16 @@ static void add_notify(struct state *sp, const char *path)
 
 void ast_localtime_wakeup_monitor(struct ast_test *info)
 {
+       struct timeval wait_now = ast_tvnow();
+       struct timespec wait_time = { .tv_sec = wait_now.tv_sec + 2, .tv_nsec = wait_now.tv_usec * 1000 };
+
        if (inotify_thread != AST_PTHREADT_NULL) {
                AST_LIST_LOCK(&zonelist);
 #ifdef TEST_FRAMEWORK
                test = info;
 #endif
                pthread_kill(inotify_thread, SIGURG);
-               ast_cond_wait(&initialization, &(&zonelist)->lock);
+               ast_cond_timedwait(&initialization, &(&zonelist)->lock, &wait_time);
 #ifdef TEST_FRAMEWORK
                test = NULL;
 #endif