summaryrefslogtreecommitdiff
path: root/main/stdtime
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2015-12-28 16:02:19 -0400
committerJoshua Colp <jcolp@digium.com>2015-12-28 14:11:14 -0600
commita05bb258b15455dedf282be0baae5dc3098442c1 (patch)
tree0a34017c258af7cebe4bd64f1e2234b764e2fa84 /main/stdtime
parentb4b4a95225a6170c4ddd0e567218d4033d9600f8 (diff)
test_time: Provide a timeout when waiting.
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
Diffstat (limited to 'main/stdtime')
-rw-r--r--main/stdtime/localtime.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/main/stdtime/localtime.c b/main/stdtime/localtime.c
index 927d473fd..c10b7af62 100644
--- a/main/stdtime/localtime.c
+++ b/main/stdtime/localtime.c
@@ -796,13 +796,16 @@ static void sstate_free(struct state *p)
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