mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-30 20:33:08 +02:00
fix up refcount/properties test case
Recent changes to the properties testcase made invalid use of the GArray free function. This free function takes a pointer to the item to be freed, not the item itself. Since that item was a pointer to a GObject, g_object_unref() was getting a GObject**, rather than a GObject*. The use of GArray in this testcase is pretty questionable in the first place, so just use C arrays instead.
This commit is contained in:
parent
748c86e45f
commit
9da87f597c
@ -189,63 +189,46 @@ run_thread (GTest * test)
|
|||||||
int
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
#define N_THREADS 5
|
||||||
|
GThread *test_threads[N_THREADS];
|
||||||
|
GTest *test_objects[N_THREADS];
|
||||||
gint i;
|
gint i;
|
||||||
GArray *test_objects;
|
|
||||||
GArray *test_threads;
|
|
||||||
const gint n_threads = 5;
|
|
||||||
|
|
||||||
g_print ("START: %s\n", argv[0]);
|
g_print ("START: %s\n", argv[0]);
|
||||||
g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | g_log_set_always_fatal (G_LOG_FATAL_MASK));
|
g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | g_log_set_always_fatal (G_LOG_FATAL_MASK));
|
||||||
|
|
||||||
test_objects = g_array_new (FALSE, FALSE, sizeof (GTest *));
|
for (i = 0; i < N_THREADS; i++) {
|
||||||
g_array_set_clear_func (test_objects, (GDestroyNotify) g_object_unref);
|
|
||||||
|
|
||||||
for (i = 0; i < n_threads; i++) {
|
|
||||||
GTest *test;
|
GTest *test;
|
||||||
|
|
||||||
test = g_object_new (G_TYPE_TEST, NULL);
|
test = g_object_new (G_TYPE_TEST, NULL);
|
||||||
g_array_append_val (test_objects, test);
|
test_objects[i] = test;
|
||||||
|
|
||||||
g_assert (test->count == test->dummy);
|
g_assert (test->count == test->dummy);
|
||||||
g_signal_connect (test, "notify::dummy", G_CALLBACK (dummy_notify), NULL);
|
g_signal_connect (test, "notify::dummy", G_CALLBACK (dummy_notify), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
test_threads = g_array_new (FALSE, FALSE, sizeof (GThread *));
|
|
||||||
|
|
||||||
stopping = FALSE;
|
stopping = FALSE;
|
||||||
|
|
||||||
for (i = 0; i < n_threads; i++) {
|
for (i = 0; i < N_THREADS; i++)
|
||||||
GThread *thread;
|
test_threads[i] = g_thread_create ((GThreadFunc) run_thread, test_objects[i], TRUE, NULL);
|
||||||
GTest *test;
|
|
||||||
|
|
||||||
test = g_array_index (test_objects, GTest *, i);
|
|
||||||
|
|
||||||
thread = g_thread_create ((GThreadFunc) run_thread, test, TRUE, NULL);
|
|
||||||
g_array_append_val (test_threads, thread);
|
|
||||||
}
|
|
||||||
g_usleep (3000000);
|
g_usleep (3000000);
|
||||||
|
|
||||||
stopping = TRUE;
|
stopping = TRUE;
|
||||||
g_print ("\nstopping\n");
|
g_print ("\nstopping\n");
|
||||||
|
|
||||||
/* join all threads */
|
/* join all threads */
|
||||||
for (i = 0; i < n_threads; i++) {
|
for (i = 0; i < N_THREADS; i++)
|
||||||
GThread *thread;
|
g_thread_join (test_threads[i]);
|
||||||
|
|
||||||
thread = g_array_index (test_threads, GThread *, i);
|
|
||||||
g_thread_join (thread);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_print ("stopped\n");
|
g_print ("stopped\n");
|
||||||
|
|
||||||
for (i = 0; i < n_threads; i++) {
|
for (i = 0; i < N_THREADS; i++) {
|
||||||
GTest *test;
|
GTest *test = test_objects[i];
|
||||||
|
|
||||||
test = g_array_index (test_objects, GTest *, i);
|
|
||||||
|
|
||||||
g_assert (test->count == test->dummy);
|
g_assert (test->count == test->dummy);
|
||||||
|
g_object_unref (test);
|
||||||
}
|
}
|
||||||
g_array_free (test_objects, TRUE);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user