diff options
author | Philip Withnall <pwithnall@endlessos.org> | 2020-11-11 18:17:23 +0000 |
---|---|---|
committer | Philip Withnall <pwithnall@endlessos.org> | 2020-11-20 14:40:19 +0000 |
commit | ea746c79faf554d980c21b0e4381753e003d2dc6 (patch) | |
tree | a8dc102c5c1dec38d658d90c208ec7da3f16c010 | |
parent | a6ce0e742a5c75c53a7c702ebb1af1084065160a (diff) | |
download | glib-ea746c79faf554d980c21b0e4381753e003d2dc6.tar.gz |
tests: Fix non-atomic access to a shared variable
And drop the `volatile` qualifier from the variable, as that doesn’t
help with thread safety.
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
Helps: #600
-rw-r--r-- | glib/tests/mainloop.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/glib/tests/mainloop.c b/glib/tests/mainloop.c index 16763a0ea..563a951de 100644 --- a/glib/tests/mainloop.c +++ b/glib/tests/mainloop.c @@ -918,7 +918,7 @@ test_mainloop_overflow (void) g_main_context_unref (ctx); } -static volatile gint ready_time_dispatched; +static gint ready_time_dispatched; /* (atomic) */ static gboolean ready_time_dispatch (GSource *source, @@ -964,7 +964,7 @@ test_ready_time (void) /* A source with no ready time set should not fire */ g_assert_cmpint (g_source_get_ready_time (source), ==, -1); while (g_main_context_iteration (NULL, FALSE)); - g_assert_false (ready_time_dispatched); + g_assert_false (g_atomic_int_get (&ready_time_dispatched)); /* The ready time should not have been changed */ g_assert_cmpint (g_source_get_ready_time (source), ==, -1); @@ -978,37 +978,37 @@ test_ready_time (void) */ g_source_set_ready_time (source, g_get_monotonic_time () + G_TIME_SPAN_DAY); while (g_main_context_iteration (NULL, FALSE)); - g_assert_false (ready_time_dispatched); + g_assert_false (g_atomic_int_get (&ready_time_dispatched)); /* Make sure it didn't get reset */ g_assert_cmpint (g_source_get_ready_time (source), !=, -1); /* Ready time of -1 -> don't fire */ g_source_set_ready_time (source, -1); while (g_main_context_iteration (NULL, FALSE)); - g_assert_false (ready_time_dispatched); + g_assert_false (g_atomic_int_get (&ready_time_dispatched)); /* Not reset, but should still be -1 from above */ g_assert_cmpint (g_source_get_ready_time (source), ==, -1); /* A ready time of the current time should fire immediately */ g_source_set_ready_time (source, g_get_monotonic_time ()); while (g_main_context_iteration (NULL, FALSE)); - g_assert_true (ready_time_dispatched); - ready_time_dispatched = FALSE; + g_assert_true (g_atomic_int_get (&ready_time_dispatched)); + g_atomic_int_set (&ready_time_dispatched, FALSE); /* Should have gotten reset by the handler function */ g_assert_cmpint (g_source_get_ready_time (source), ==, -1); /* As well as one in the recent past... */ g_source_set_ready_time (source, g_get_monotonic_time () - G_TIME_SPAN_SECOND); while (g_main_context_iteration (NULL, FALSE)); - g_assert_true (ready_time_dispatched); - ready_time_dispatched = FALSE; + g_assert_true (g_atomic_int_get (&ready_time_dispatched)); + g_atomic_int_set (&ready_time_dispatched, FALSE); g_assert_cmpint (g_source_get_ready_time (source), ==, -1); /* Zero is the 'official' way to get a source to fire immediately */ g_source_set_ready_time (source, 0); while (g_main_context_iteration (NULL, FALSE)); - g_assert_true (ready_time_dispatched); - ready_time_dispatched = FALSE; + g_assert_true (g_atomic_int_get (&ready_time_dispatched)); + g_atomic_int_set (&ready_time_dispatched, FALSE); g_assert_cmpint (g_source_get_ready_time (source), ==, -1); /* Now do some tests of cross-thread wakeups. |