everyone knows the answer; that's why they don't reply. glib follows pthread more-or-less, g_mutex_free maps to pthread_mutex_destroy whose man page says: pthread_mutex_destroy destroys a mutex object, freeing the resources it might hold. The mutex must be unlocked on entrance. In the LinuxThreads implementation, no resources are associated with mutex objects, thus pthread_mutex_destroy actually does nothing except checking that the mutex is unlocked. Your code idea: > g_mutex_lock(mutex); > g_mutex_unlock(mutex); > g_mutex_free(mutex); may "fix" your situation, but it is almost certainly wrong. if you are already holding the lock, which is rather likely the case, then that's deadlock, your program will freeze. if you aren't, then you've introduced a race condition: after unlocking, another thread may lock the mutex and g_mutex_free will be unhappy. threads are difficult. - dave On Fri, Nov 14, 2008 at 11:01:11AM +0800, Peter Cai wrote: > As no body seems to know the answer, I made a test: > > ============================ > #include <glib.h> > > int main() > { > if (!g_thread_supported ()) g_thread_init (NULL); > > GMutex *mutex = g_mutex_new(); > g_mutex_lock(mutex); > g_mutex_free(mutex); > return 0; > } > ============================ > > It crashes on g_mutex_free without any hesitate :) > > So finally the approach I use to avoid this kind of problem is using > another mutex, which does not need to be freed, > to protect the one I will free. > > But I am wondering if that was needed. Can I just use: > > g_mutex_lock(mutex); > g_mutex_unlock(mutex); > g_mutex_free(mutex); > > If thread switches just after unlock and another thread locked mutex, > the code might fail. > > On Thu, Nov 13, 2008 at 4:41 PM, Peter Cai <newptcai@xxxxxxxxx> wrote: > > Hi all, > > > > Is it safe to call g_free_mutex on a locked mutex? > > > > If it's not, what is the correct way to do that? > > > > > > -- > ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? > _______________________________________________ > gtk-list mailing list > gtk-list@xxxxxxxxx > http://mail.gnome.org/mailman/listinfo/gtk-list -- _______________________________________________ gtk-list mailing list gtk-list@xxxxxxxxx http://mail.gnome.org/mailman/listinfo/gtk-list