[glib] tests: add a test for g_cond_wait_until()
- From: Ryan Lortie <desrt src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] tests: add a test for g_cond_wait_until()
- Date: Thu, 20 Feb 2014 22:59:30 +0000 (UTC)
commit 436d77f70ac9aed56d1b5f223e05a29e34378444
Author: Ryan Lortie <desrt desrt ca>
Date: Tue Feb 18 19:04:24 2014 -0500
tests: add a test for g_cond_wait_until()
https://bugzilla.gnome.org/show_bug.cgi?id=673607
glib/tests/cond.c | 38 ++++++++++++++++++++++++++++++++++++++
1 files changed, 38 insertions(+), 0 deletions(-)
---
diff --git a/glib/tests/cond.c b/glib/tests/cond.c
index f2ea6b0..480e32e 100644
--- a/glib/tests/cond.c
+++ b/glib/tests/cond.c
@@ -25,6 +25,8 @@
#include <glib.h>
+#include <unistd.h>
+
static GCond cond;
static GMutex mutex;
static volatile gint next;
@@ -232,6 +234,41 @@ test_cond2 (void)
barrier_clear (&b);
}
+static void
+test_wait_until (void)
+{
+ gint64 until;
+ GMutex lock;
+ GCond cond;
+
+ /* This test will make sure we don't wait too much or too little.
+ *
+ * We check the 'too long' with a timeout of 60 seconds.
+ *
+ * We check the 'too short' by verifying a guarantee of the API: we
+ * should not wake up until the specified time has passed.
+ */
+ g_mutex_init (&lock);
+ g_cond_init (&cond);
+
+ /* Don't wait forever... */
+ alarm (60);
+
+ until = g_get_monotonic_time () + G_TIME_SPAN_SECOND;
+
+ /* Could still have spurious wakeups, so we must loop... */
+ g_mutex_lock (&lock);
+ while (g_cond_wait_until (&cond, &lock, until))
+ ;
+ g_mutex_unlock (&lock);
+
+ /* Make sure it's after the until time */
+ g_assert_cmpint (until, <=, g_get_monotonic_time ());
+
+ g_mutex_clear (&lock);
+ g_cond_clear (&cond);
+}
+
int
main (int argc, char *argv[])
{
@@ -239,6 +276,7 @@ main (int argc, char *argv[])
g_test_add_func ("/thread/cond1", test_cond1);
g_test_add_func ("/thread/cond2", test_cond2);
+ g_test_add_func ("/thread/cond/wait-until", test_wait_until);
return g_test_run ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]