X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tests%2Fonceinit.c;h=89ba6a136d8217bea8baa7f5a04928c6f8acb2b1;hb=2a53b4d0e2c98a14aedf31e38f0ad1fb2e8fe26f;hp=372eb2fafe97a19c7bd5bdddc5a9d33e9e372d8b;hpb=63adeda0861a26b38ec0adc76255666554c18951;p=platform%2Fupstream%2Fglib.git diff --git a/tests/onceinit.c b/tests/onceinit.c index 372eb2f..89ba6a1 100644 --- a/tests/onceinit.c +++ b/tests/onceinit.c @@ -23,8 +23,8 @@ #define N_THREADS (13) -static GMutex *tmutex = NULL; -static GCond *tcond = NULL; +static GMutex tmutex; +static GCond tcond; static volatile int thread_call_count = 0; static char dummy_value = 'x'; @@ -32,7 +32,7 @@ static void assert_singleton_execution1 (void) { static volatile int seen_execution = 0; - int old_seen_execution = g_atomic_int_exchange_and_add (&seen_execution, 1); + int old_seen_execution = g_atomic_int_add (&seen_execution, 1); if (old_seen_execution != 0) g_error ("%s: function executed more than once", G_STRFUNC); } @@ -41,7 +41,7 @@ static void assert_singleton_execution2 (void) { static volatile int seen_execution = 0; - int old_seen_execution = g_atomic_int_exchange_and_add (&seen_execution, 1); + int old_seen_execution = g_atomic_int_add (&seen_execution, 1); if (old_seen_execution != 0) g_error ("%s: function executed more than once", G_STRFUNC); } @@ -50,7 +50,7 @@ static void assert_singleton_execution3 (void) { static volatile int seen_execution = 0; - int old_seen_execution = g_atomic_int_exchange_and_add (&seen_execution, 1); + int old_seen_execution = g_atomic_int_add (&seen_execution, 1); if (old_seen_execution != 0) g_error ("%s: function executed more than once", G_STRFUNC); } @@ -96,13 +96,13 @@ initializer3 (void) static gpointer tmain_call_initializer3 (gpointer user_data) { - g_mutex_lock (tmutex); - g_cond_wait (tcond, tmutex); - g_mutex_unlock (tmutex); + g_mutex_lock (&tmutex); + g_cond_wait (&tcond, &tmutex); + g_mutex_unlock (&tmutex); //g_printf ("["); initializer3(); //g_printf ("]\n"); - g_atomic_int_exchange_and_add (&thread_call_count, 1); + g_atomic_int_add (&thread_call_count, 1); return NULL; } @@ -112,27 +112,25 @@ int main (int argc, char *argv[]) { - GThread *threads[N_THREADS]; + G_GNUC_UNUSED GThread *threads[N_THREADS]; int i; + void *p; + /* test simple initializer */ initializer1(); initializer1(); /* test pointer initializer */ - void *p = initializer2(); + p = initializer2(); g_assert (p == &dummy_value); p = initializer2(); g_assert (p == &dummy_value); - /* setup threads */ - g_thread_init (NULL); - tmutex = g_mutex_new (); - tcond = g_cond_new (); /* start multiple threads for initializer3() */ - g_mutex_lock (tmutex); + g_mutex_lock (&tmutex); for (i = 0; i < N_THREADS; i++) threads[i] = g_thread_create (tmain_call_initializer3, 0, FALSE, NULL); - g_mutex_unlock (tmutex); + g_mutex_unlock (&tmutex); /* concurrently call initializer3() */ - g_cond_broadcast (tcond); + g_cond_broadcast (&tcond); /* loop until all threads passed the call to initializer3() */ while (g_atomic_int_get (&thread_call_count) < i) { @@ -140,14 +138,14 @@ main (int argc, g_thread_yield(); /* concurrent shuffling for single core */ else g_usleep (1000); /* concurrent shuffling for multi core */ - g_cond_broadcast (tcond); + g_cond_broadcast (&tcond); } /* call multiple (unoptimized) initializers from multiple threads */ - g_mutex_lock (tmutex); + g_mutex_lock (&tmutex); g_atomic_int_set (&thread_call_count, 0); for (i = 0; i < N_THREADS; i++) g_thread_create (stress_concurrent_initializers, 0, FALSE, NULL); - g_mutex_unlock (tmutex); + g_mutex_unlock (&tmutex); while (g_atomic_int_get (&thread_call_count) < 256 * 4 * N_THREADS) g_usleep (50 * 1000); /* wait for all 5 threads to complete */ return 0; @@ -157,7 +155,8 @@ main (int argc, * to uncover possible races in the g_once_init_enter_impl()/ * g_once_init_leave() implementations */ -#define g_once_init_enter g_once_init_enter_impl +#undef g_once_init_enter +#undef g_once_init_leave /* define 16 * 16 simple initializers */ #define DEFINE_TEST_INITIALIZER(N) \ @@ -262,13 +261,13 @@ stress_concurrent_initializers (void *user_data) }; int i; /* sync to main thread */ - g_mutex_lock (tmutex); - g_mutex_unlock (tmutex); + g_mutex_lock (&tmutex); + g_mutex_unlock (&tmutex); /* initialize concurrently */ for (i = 0; i < G_N_ELEMENTS (initializers); i++) { initializers[i](); - g_atomic_int_exchange_and_add (&thread_call_count, 1); + g_atomic_int_add (&thread_call_count, 1); } return NULL; }