-#ifdef G_THREAD_USE_PID_SURROGATE
- priority_map[G_THREAD_PRIORITY_NORMAL] =
- getpriority (PRIO_PROCESS, (getpid ()));
- priority_map[G_THREAD_PRIORITY_LOW] =
- MIN (20, priority_map[G_THREAD_PRIORITY_NORMAL] + 10);
- priority_map[G_THREAD_PRIORITY_HIGH] =
- MAX (-20, priority_map[G_THREAD_PRIORITY_NORMAL] - 10);
- priority_map[G_THREAD_PRIORITY_URGENT] =
- MAX (-20, priority_map[G_THREAD_PRIORITY_NORMAL] - 15);
-#endif /* G_THREAD_USE_PID_SURROGATE */
+}
+#endif /* G_THREADS_ENABLED */
+
+gpointer
+g_once_impl (GOnce *once,
+ GThreadFunc func,
+ gpointer arg)
+{
+ g_mutex_lock (g_once_mutex);
+
+ while (once->status == G_ONCE_STATUS_PROGRESS)
+ g_cond_wait (g_once_cond, g_once_mutex);
+
+ if (once->status != G_ONCE_STATUS_READY)
+ {
+ once->status = G_ONCE_STATUS_PROGRESS;
+ g_mutex_unlock (g_once_mutex);
+
+ once->retval = func (arg);
+
+ g_mutex_lock (g_once_mutex);
+ once->status = G_ONCE_STATUS_READY;
+ g_cond_broadcast (g_once_cond);
+ }
+
+ g_mutex_unlock (g_once_mutex);
+
+ return once->retval;