summaryrefslogtreecommitdiff
path: root/glib
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2022-06-24 15:08:43 +0400
committerMarc-André Lureau <marcandre.lureau@redhat.com>2022-07-07 15:52:25 +0400
commit1a29fd430826fce26ea888de865845c4da255f52 (patch)
tree58910788e417c985e8912cd35c11f38c2a4082a8 /glib
parent17ac6642c78aed4fe3a7f7869877cec004aff394 (diff)
downloadglib-1a29fd430826fce26ea888de865845c4da255f52.tar.gz
tests/mainloop: iterate for a little while for timeout-once
On win32, WaitForSingleObject may return before the timeout is dispatched, as it doesn't have a resolution higher than the system tick. Wait for ~50ms before checking the callback changes. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Diffstat (limited to 'glib')
-rw-r--r--glib/tests/mainloop.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/glib/tests/mainloop.c b/glib/tests/mainloop.c
index 105bec87e..c18da94fc 100644
--- a/glib/tests/mainloop.c
+++ b/glib/tests/mainloop.c
@@ -2349,6 +2349,7 @@ test_maincontext_timeout_once (void)
{
guint counter = 0, check_counter = 0;
guint source_id;
+ gint64 t;
GSource *source;
g_test_summary ("Test g_timeout_add_once() works");
@@ -2360,14 +2361,18 @@ test_maincontext_timeout_once (void)
/* Iterating the main context should dispatch the source, though we have to block. */
g_assert_cmpuint (counter, ==, 0);
- g_main_context_iteration (NULL, TRUE);
+ t = g_get_monotonic_time ();
+ while (g_get_monotonic_time () - t < 50 * 1000 && counter == 0)
+ g_main_context_iteration (NULL, TRUE);
g_assert_cmpuint (counter, ==, 1);
/* Iterating it again should not dispatch the source again. We add a second
* timeout and block until that is dispatched. Given the ordering guarantees,
* we should then know whether the first one would have re-dispatched by then. */
g_timeout_add_once (30 /* ms */, once_cb, &check_counter);
- g_main_context_iteration (NULL, TRUE);
+ t = g_get_monotonic_time ();
+ while (g_get_monotonic_time () - t < 50 * 1000 && check_counter == 0)
+ g_main_context_iteration (NULL, TRUE);
g_assert_cmpuint (check_counter, ==, 1);
g_assert_cmpuint (counter, ==, 1);
g_assert_true (g_source_is_destroyed (source));