--- a/lib/glibUtils/fileLogger.c 2012-11-01 00:59:53.000000000 +0100 +++ b/lib/glibUtils/fileLogger.c 2013-02-26 17:12:45.084792332 +0100 @@ -43,7 +43,7 @@ guint maxFiles; gboolean append; gboolean error; - GStaticRWLock lock; + GRWLock rw_lock; } FileLogger; @@ -254,7 +254,7 @@ { FileLogger *logger = data; - g_static_rw_lock_reader_lock(&logger->lock); + g_rw_lock_reader_lock(&logger->rw_lock); if (logger->error) { goto exit; @@ -265,13 +265,13 @@ * We need to drop the read lock and acquire a write lock to open * the log file. */ - g_static_rw_lock_reader_unlock(&logger->lock); - g_static_rw_lock_writer_lock(&logger->lock); + g_rw_lock_reader_unlock(&logger->rw_lock); + g_rw_lock_writer_lock(&logger->rw_lock); if (logger->file == NULL) { logger->file = FileLoggerOpen(data); } - g_static_rw_lock_writer_unlock(&logger->lock); - g_static_rw_lock_reader_lock(&logger->lock); + g_rw_lock_writer_unlock(&logger->rw_lock); + g_rw_lock_reader_lock(&logger->rw_lock); if (logger->file == NULL) { logger->error = TRUE; goto exit; @@ -288,15 +288,15 @@ #endif if (g_atomic_int_get(&logger->logSize) >= logger->maxSize) { /* Drop the reader lock, grab the writer lock and re-check. */ - g_static_rw_lock_reader_unlock(&logger->lock); - g_static_rw_lock_writer_lock(&logger->lock); + g_rw_lock_reader_unlock(&logger->rw_lock); + g_rw_lock_writer_lock(&logger->rw_lock); if (g_atomic_int_get(&logger->logSize) >= logger->maxSize) { fclose(logger->file); logger->append = FALSE; logger->file = FileLoggerOpen(logger); } - g_static_rw_lock_writer_unlock(&logger->lock); - g_static_rw_lock_reader_lock(&logger->lock); + g_rw_lock_writer_unlock(&logger->rw_lock); + g_rw_lock_reader_lock(&logger->rw_lock); } else { fflush(logger->file); } @@ -306,7 +306,7 @@ } exit: - g_static_rw_lock_reader_unlock(&logger->lock); + g_rw_lock_reader_unlock(&logger->rw_lock); } @@ -328,7 +328,7 @@ if (logger->file != NULL) { fclose(logger->file); } - g_static_rw_lock_free(&logger->lock); + g_rw_lock_clear(&logger->rw_lock); g_free(logger->path); g_free(logger); } @@ -375,7 +375,7 @@ data->append = append; data->maxSize = maxSize * 1024 * 1024; data->maxFiles = maxFiles + 1; /* To account for the active log file. */ - g_static_rw_lock_init(&data->lock); + g_rw_lock_init(&data->rw_lock); return &data->handler; } --- a/lib/rpcChannel/bdoorChannel.c 2012-11-01 00:58:56.000000000 +0100 +++ b/lib/rpcChannel/bdoorChannel.c 2013-02-26 17:20:12.386291149 +0100 @@ -34,7 +34,7 @@ typedef struct BackdoorChannel { GMainContext *mainCtx; - GStaticMutex outLock; + GMutex outLock; RpcIn *in; RpcOut *out; gboolean inStarted; @@ -119,7 +119,7 @@ { BackdoorChannel *bdoor = chan->_private; - g_static_mutex_lock(&bdoor->outLock); + g_mutex_lock(&bdoor->outLock); if (bdoor->out != NULL) { if (bdoor->outStarted) { RpcOut_stop(bdoor->out); @@ -128,7 +128,7 @@ } else { ASSERT(!bdoor->outStarted); } - g_static_mutex_unlock(&bdoor->outLock); + g_mutex_unlock(&bdoor->outLock); if (bdoor->in != NULL) { if (bdoor->inStarted) { @@ -158,7 +158,7 @@ RpcIn_Destruct(bdoor->in); } RpcOut_Destruct(bdoor->out); - g_static_mutex_free(&bdoor->outLock); + g_mutex_clear(&bdoor->outLock); if (bdoor->mainCtx != NULL) { g_main_context_unref(bdoor->mainCtx); } @@ -190,7 +190,7 @@ size_t replyLen; BackdoorChannel *bdoor = chan->_private; - g_static_mutex_lock(&bdoor->outLock); + g_mutex_lock(&bdoor->outLock); if (!bdoor->outStarted) { goto exit; } @@ -248,7 +248,7 @@ } exit: - g_static_mutex_unlock(&bdoor->outLock); + g_mutex_unlock(&bdoor->outLock); return ret; } @@ -268,7 +268,7 @@ ret = RpcChannel_Create(); bdoor = g_malloc0(sizeof *bdoor); - g_static_mutex_init(&bdoor->outLock); + g_mutex_init(&bdoor->outLock); bdoor->out = RpcOut_Construct(); ASSERT(bdoor->out != NULL); --- a/libvmtools/i18n.c 2013-02-26 16:57:40.149995816 +0100 +++ b/libvmtools/i18n.c 2013-02-26 17:20:35.740847258 +0100 @@ -54,7 +54,7 @@ typedef struct MsgState { HashTable *domains; /* List of text domains. */ - GStaticMutex lock; /* Mutex to protect shared state. */ + GMutex lock; /* Mutex to protect shared state. */ } MsgState; @@ -132,7 +132,7 @@ { ASSERT(gMsgState == NULL); gMsgState = g_new0(MsgState, 1); - g_static_mutex_init(&gMsgState->lock); + g_mutex_init(&gMsgState->lock); return NULL; } @@ -343,7 +343,7 @@ * This lock is pretty coarse-grained, but a lot of the code below just runs * in exceptional situations, so it should be OK. */ - g_static_mutex_lock(&state->lock); + g_mutex_lock(&state->lock); catalog = MsgGetCatalog(domain); if (catalog != NULL) { @@ -414,7 +414,7 @@ } } - g_static_mutex_unlock(&state->lock); + g_mutex_unlock(&state->lock); return strp; } @@ -681,7 +681,7 @@ if (gMsgState->domains != NULL) { HashTable_Free(gMsgState->domains); } - g_static_mutex_free(&gMsgState->lock); + g_mutex_clear(&gMsgState->lock); g_free(gMsgState); } } @@ -774,9 +774,9 @@ "catalog dir '%s'.\n", domain, lang, catdir); } } else { - g_static_mutex_lock(&state->lock); + g_mutex_lock(&state->lock); MsgSetCatalog(domain, catalog); - g_static_mutex_unlock(&state->lock); + g_mutex_unlock(&state->lock); } g_free(file); free(dfltdir); --- a/libvmtools/vmxLogger.c 2012-11-01 00:58:28.000000000 +0100 +++ b/libvmtools/vmxLogger.c 2013-02-26 17:20:21.628115494 +0100 @@ -27,7 +27,7 @@ typedef struct VMXLoggerData { GlibLogger handler; - GStaticMutex lock; + GMutex lock; RpcChannel *chan; } VMXLoggerData; @@ -60,7 +60,7 @@ { VMXLoggerData *logger = data; - g_static_mutex_lock(&logger->lock); + g_mutex_lock(&logger->lock); if (RpcChannel_Start(logger->chan)) { gchar *msg; gint cnt = VMToolsAsprintf(&msg, "log %s", message); @@ -75,7 +75,7 @@ g_free(msg); RpcChannel_Stop(logger->chan); } - g_static_mutex_unlock(&logger->lock); + g_mutex_unlock(&logger->lock); } @@ -95,7 +95,7 @@ { VMXLoggerData *logger = data; RpcChannel_Destroy(logger->chan); - g_static_mutex_free(&logger->lock); + g_mutex_clear(&logger->lock); g_free(logger); } @@ -119,7 +119,7 @@ data->handler.addsTimestamp = TRUE; data->handler.shared = TRUE; data->handler.dtor = VMXLoggerDestroy; - g_static_mutex_init(&data->lock); + g_mutex_init(&data->lock); data->chan = BackdoorChannel_New(); return &data->handler; } --- a/services/vmtoolsd/mainLoop.c 2012-11-01 00:58:56.000000000 +0100 +++ b/services/vmtoolsd/mainLoop.c 2013-02-26 03:08:39.640930774 +0100 @@ -376,10 +376,6 @@ GMainContext *gctx; ToolsServiceProperty ctxProp = { TOOLS_CORE_PROP_CTX }; - if (!g_thread_supported()) { - g_thread_init(NULL); - } - ToolsCore_ReloadConfig(state, FALSE); /* Initializes the app context. */ --- a/services/vmtoolsd/serviceObj.c 2012-11-01 00:58:56.000000000 +0100 +++ b/services/vmtoolsd/serviceObj.c 2013-02-26 17:20:39.979766691 +0100 @@ -180,14 +180,14 @@ id -= 1; - g_mutex_lock(self->lock); + g_mutex_lock(&self->lock); if (id < self->props->len) { ServiceProperty *p = &g_array_index(self->props, ServiceProperty, id); g_value_set_pointer(value, p->value); } - g_mutex_unlock(self->lock); + g_mutex_unlock(&self->lock); } @@ -217,14 +217,14 @@ id -= 1; - g_mutex_lock(self->lock); + g_mutex_lock(&self->lock); if (id < self->props->len) { p = &g_array_index(self->props, ServiceProperty, id); p->value = g_value_get_pointer(value); } - g_mutex_unlock(self->lock); + g_mutex_unlock(&self->lock); if (p != NULL) { g_object_notify(object, p->name); @@ -260,7 +260,7 @@ params); self = TOOLSCORE_SERVICE(object); - self->lock = g_mutex_new(); + g_mutex_init(&self->lock); self->props = g_array_new(FALSE, FALSE, sizeof (ServiceProperty)); return object; @@ -296,7 +296,7 @@ } g_array_free(self->props, TRUE); - g_mutex_free(self->lock); + g_mutex_clear(&self->lock); } @@ -459,7 +459,7 @@ prop->name, G_PARAM_READWRITE); - g_mutex_lock(obj->lock); + g_mutex_lock(&obj->lock); sprop.id = ++PROP_ID_SEQ; sprop.name = g_strdup(prop->name); @@ -467,6 +467,6 @@ g_array_append_val(obj->props, sprop); g_object_class_install_property(G_OBJECT_CLASS(klass), sprop.id, pspec); - g_mutex_unlock(obj->lock); + g_mutex_unlock(&obj->lock); } --- a/services/vmtoolsd/serviceObj.h 2012-11-01 00:58:56.000000000 +0100 +++ b/services/vmtoolsd/serviceObj.h 2013-02-26 17:06:07.693344949 +0100 @@ -39,7 +39,7 @@ typedef struct ToolsCoreService { GObject parent; - GMutex *lock; + GMutex lock; GArray *props; } ToolsCoreService; --- a/services/vmtoolsd/threadPool.c 2012-11-01 00:58:56.000000000 +0100 +++ b/services/vmtoolsd/threadPool.c 2013-02-26 17:20:45.088669587 +0100 @@ -40,7 +40,7 @@ GThreadPool *pool; GQueue *workQueue; GPtrArray *threads; - GMutex *lock; + GMutex lock; guint nextWorkId; } ThreadPoolState; @@ -170,9 +170,9 @@ * In multi-threaded mode, the thread pool callback already did this. */ if (gState.pool == NULL) { - g_mutex_lock(gState.lock); + g_mutex_lock(&gState.lock); g_queue_remove(gState.workQueue, work); - g_mutex_unlock(gState.lock); + g_mutex_unlock(&gState.lock); } work->cb(gState.ctx, work->data); @@ -223,7 +223,7 @@ task->cb(gState.ctx, task->data); task->active = FALSE; - g_mutex_lock(gState.lock); + g_mutex_lock(&gState.lock); /* If not active, the shutdown function will clean things up. */ if (gState.active) { g_ptr_array_remove(gState.threads, task); @@ -232,7 +232,7 @@ task, ToolsCorePoolDestroyThread); } - g_mutex_unlock(gState.lock); + g_mutex_unlock(&gState.lock); return NULL; } @@ -257,9 +257,9 @@ { WorkerTask *work; - g_mutex_lock(gState.lock); + g_mutex_lock(&gState.lock); work = g_queue_pop_tail(gState.workQueue); - g_mutex_unlock(gState.lock); + g_mutex_unlock(&gState.lock); ASSERT(work != NULL); @@ -300,7 +300,7 @@ task->data = data; task->dtor = dtor; - g_mutex_lock(gState.lock); + g_mutex_lock(&gState.lock); if (!gState.active) { g_free(task); @@ -351,7 +351,7 @@ ToolsCorePoolDestroyTask); exit: - g_mutex_unlock(gState.lock); + g_mutex_unlock(&gState.lock); return id; } @@ -378,7 +378,7 @@ g_return_if_fail(id != 0); - g_mutex_lock(gState.lock); + g_mutex_lock(&gState.lock); if (!gState.active) { goto exit; } @@ -390,7 +390,7 @@ } exit: - g_mutex_unlock(gState.lock); + g_mutex_unlock(&gState.lock); if (task != NULL) { if (task->srcId > 0) { @@ -431,7 +431,7 @@ GError *err = NULL; StandaloneTask *task = NULL; - g_mutex_lock(gState.lock); + g_mutex_lock(&gState.lock); if (!gState.active) { goto exit; } @@ -442,7 +442,7 @@ task->interrupt = interrupt; task->data = data; task->dtor = dtor; - task->thread = g_thread_create(ToolsCorePoolRunThread, task, TRUE, &err); + task->thread = g_thread_try_new("tasks", ToolsCorePoolRunThread, task, &err); if (err == NULL) { g_ptr_array_add(gState.threads, task); @@ -454,7 +454,7 @@ } exit: - g_mutex_unlock(gState.lock); + g_mutex_unlock(&gState.lock); return task != NULL; } @@ -526,7 +526,7 @@ } gState.active = TRUE; - gState.lock = g_mutex_new(); + g_mutex_init(&gState.lock); gState.threads = g_ptr_array_new(); gState.workQueue = g_queue_new(); @@ -553,9 +553,9 @@ { guint i; - g_mutex_lock(gState.lock); + g_mutex_lock(&gState.lock); gState.active = FALSE; - g_mutex_unlock(gState.lock); + g_mutex_unlock(&gState.lock); /* Notify all spawned threads to stop. */ for (i = 0; i < gState.threads->len; i++) { @@ -589,7 +589,7 @@ /* Cleanup. */ g_ptr_array_free(gState.threads, TRUE); g_queue_free(gState.workQueue); - g_mutex_free(gState.lock); + g_mutex_clear(&gState.lock); memset(&gState, 0, sizeof gState); g_object_set(ctx->serviceObj, TOOLS_CORE_PROP_TPOOL, NULL, NULL); }