test high contention on closure reference counts to trigger and catch

Mon Aug  1 23:33:47 2005  Tim Janik  <timj@imendio.com>

        * tests/refcount/closures.c: test high contention on closure
        reference counts to trigger and catch non-atomic updates.

        * tests/refcount/objects.c:
        * tests/refcount/objects2.c:
        * tests/refcount/properties.c:
        * tests/refcount/properties2.c:
        * tests/refcount/signals.c:
        fixed up test and threading fundamentals. variables accessed from all
        threads need to be volatile. context switches are enforced by using
        g_thread_yield(), not g_usleep(1) which may result in busy waits on
        some platforms. for testcode, always consider all warnings and
        critical messages fatal. issue the currently running program on
        stdout. improved progress indicators.

        * tests/refcount/properties.c:
        * tests/refcount/objects.c:
        don't overdo the number of testing threads to keep the testing machine
        usable, 2 threads can produce as much contention as 20 if executing the
        same code.

        * tests/refcount/signals.c: only start 1 thread per object. GObject
        doesn't provide mutually exclusive object access, but only mutually
        exclusive reference count modification.

        * tests/Makefile.am: added closures test.
This commit is contained in:
Tim Janik
2005-08-01 21:47:15 +00:00
committed by Tim Janik
parent 834ddd1920
commit 10a3867a6e
11 changed files with 469 additions and 38 deletions

View File

@@ -88,6 +88,9 @@ g_test_dispose (GObject * object)
static void
g_test_do_refcount (GTest * test)
{
static guint i = 1;
if (i++ % 100000 == 0)
g_print (".");
g_object_ref (test);
g_object_unref (test);
}
@@ -99,6 +102,8 @@ main (int argc, char **argv)
GTest *test;
g_thread_init (NULL);
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_type_init ();
test = g_object_new (G_TYPE_TEST, NULL);
@@ -107,5 +112,7 @@ main (int argc, char **argv)
g_test_do_refcount (test);
}
g_print ("\n");
return 0;
}