mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-01 23:13:40 +02:00
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:
@@ -158,7 +158,9 @@ static void
|
||||
dummy_notify (GObject *object,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
count++;
|
||||
count++;
|
||||
if (count % 10000 == 0)
|
||||
g_print (".");
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -177,8 +179,10 @@ 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);
|
||||
|
||||
g_signal_connect (test, "notify::dummy", G_CALLBACK (dummy_notify), NULL);
|
||||
|
Reference in New Issue
Block a user