mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-05 02:36:19 +01:00
Added debug information for g_mutex_free calls, if G_ERRORCHECK_MUTEXES is
2001-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de> * gthread.h (g_cond_wait): Added debug information for g_mutex_free calls, if G_ERRORCHECK_MUTEXES is defined. * gthread/gthread-impl.c (g_mutex_free_errorcheck_impl): Fixed it for real. Sorry for this mess. It looked like a real obvious fix, so I didn't check. Bad boy. Added some casts to quiet the compiler.
This commit is contained in:
parent
f9da22ef07
commit
1f46d9f68f
@ -1,3 +1,8 @@
|
|||||||
|
2001-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
|
* gthread.h (g_cond_wait): Added debug information for
|
||||||
|
g_mutex_free calls, if G_ERRORCHECK_MUTEXES is defined.
|
||||||
|
|
||||||
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2001-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
|
* gthread.h (g_cond_wait): Added debug information for
|
||||||
|
g_mutex_free calls, if G_ERRORCHECK_MUTEXES is defined.
|
||||||
|
|
||||||
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2001-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
|
* gthread.h (g_cond_wait): Added debug information for
|
||||||
|
g_mutex_free calls, if G_ERRORCHECK_MUTEXES is defined.
|
||||||
|
|
||||||
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2001-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
|
* gthread.h (g_cond_wait): Added debug information for
|
||||||
|
g_mutex_free calls, if G_ERRORCHECK_MUTEXES is defined.
|
||||||
|
|
||||||
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2001-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
|
* gthread.h (g_cond_wait): Added debug information for
|
||||||
|
g_mutex_free calls, if G_ERRORCHECK_MUTEXES is defined.
|
||||||
|
|
||||||
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2001-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
|
* gthread.h (g_cond_wait): Added debug information for
|
||||||
|
g_mutex_free calls, if G_ERRORCHECK_MUTEXES is defined.
|
||||||
|
|
||||||
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2001-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
|
* gthread.h (g_cond_wait): Added debug information for
|
||||||
|
g_mutex_free calls, if G_ERRORCHECK_MUTEXES is defined.
|
||||||
|
|
||||||
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2001-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
|
* gthread.h (g_cond_wait): Added debug information for
|
||||||
|
g_mutex_free calls, if G_ERRORCHECK_MUTEXES is defined.
|
||||||
|
|
||||||
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
2001-01-29 Tor Lillqvist <tml@iki.fi>
|
||||||
|
|
||||||
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
* glibconfig.h.win32.in: Use the same GMutex structure as the
|
||||||
|
@ -161,17 +161,21 @@ GMutex* g_static_mutex_get_mutex_impl (GMutex **mutex);
|
|||||||
G_THREAD_CF (mutex_trylock, TRUE, (mutex))
|
G_THREAD_CF (mutex_trylock, TRUE, (mutex))
|
||||||
# define g_mutex_unlock(mutex) \
|
# define g_mutex_unlock(mutex) \
|
||||||
G_THREAD_CF (mutex_unlock, (void)0, (mutex))
|
G_THREAD_CF (mutex_unlock, (void)0, (mutex))
|
||||||
|
# define g_mutex_free(mutex) \
|
||||||
|
G_THREAD_CF (mutex_free, (void)0, (mutex))
|
||||||
# define g_cond_wait(cond, mutex) \
|
# define g_cond_wait(cond, mutex) \
|
||||||
G_THREAD_CF (cond_wait, (void)0, (cond, mutex))
|
G_THREAD_CF (cond_wait, (void)0, (cond, mutex))
|
||||||
# define g_cond_timed_wait(cond, mutex, abs_time) \
|
# define g_cond_timed_wait(cond, mutex, abs_time) \
|
||||||
G_THREAD_CF (cond_timed_wait, TRUE, (cond, mutex, abs_time))
|
G_THREAD_CF (cond_timed_wait, TRUE, (cond, mutex, abs_time))
|
||||||
#else /* G_ERRORCHECK_MUTEXES */
|
#else /* G_ERRORCHECK_MUTEXES */
|
||||||
# define g_mutex_lock(mutex) \
|
# define g_mutex_lock(mutex) \
|
||||||
G_THREAD_ECF (mutex_lock, (void)0, mutex, void)
|
G_THREAD_ECF (mutex_lock, (void)0, (mutex), void)
|
||||||
# define g_mutex_trylock(mutex) \
|
# define g_mutex_trylock(mutex) \
|
||||||
G_THREAD_ECF (mutex_trylock, TRUE, mutex, gboolean)
|
G_THREAD_ECF (mutex_trylock, TRUE, (mutex), gboolean)
|
||||||
# define g_mutex_unlock(mutex) \
|
# define g_mutex_unlock(mutex) \
|
||||||
G_THREAD_ECF (mutex_unlock, (void)0, mutex, void)
|
G_THREAD_ECF (mutex_unlock, (void)0, (mutex), void)
|
||||||
|
# define g_mutex_free(mutex) \
|
||||||
|
G_THREAD_ECF (mutex_free, (void)0, (mutex), void)
|
||||||
# define g_cond_wait(cond, mutex) \
|
# define g_cond_wait(cond, mutex) \
|
||||||
(g_thread_supported () ? ((void(*)(GCond*, GMutex*, gulong, gchar*))\
|
(g_thread_supported () ? ((void(*)(GCond*, GMutex*, gulong, gchar*))\
|
||||||
g_thread_functions_for_glib_use.cond_wait) \
|
g_thread_functions_for_glib_use.cond_wait) \
|
||||||
@ -185,7 +189,6 @@ GMutex* g_static_mutex_get_mutex_impl (GMutex **mutex);
|
|||||||
|
|
||||||
#define g_thread_supported() (g_threads_got_initialized)
|
#define g_thread_supported() (g_threads_got_initialized)
|
||||||
#define g_mutex_new() G_THREAD_UF (mutex_new, ())
|
#define g_mutex_new() G_THREAD_UF (mutex_new, ())
|
||||||
#define g_mutex_free(mutex) G_THREAD_CF (mutex_free, (void)0, (mutex))
|
|
||||||
#define g_cond_new() G_THREAD_UF (cond_new, ())
|
#define g_cond_new() G_THREAD_UF (cond_new, ())
|
||||||
#define g_cond_signal(cond) G_THREAD_CF (cond_signal, (void)0, (cond))
|
#define g_cond_signal(cond) G_THREAD_CF (cond_signal, (void)0, (cond))
|
||||||
#define g_cond_broadcast(cond) G_THREAD_CF (cond_broadcast, (void)0, (cond))
|
#define g_cond_broadcast(cond) G_THREAD_CF (cond_broadcast, (void)0, (cond))
|
||||||
|
11
gthread.h
11
gthread.h
@ -161,17 +161,21 @@ GMutex* g_static_mutex_get_mutex_impl (GMutex **mutex);
|
|||||||
G_THREAD_CF (mutex_trylock, TRUE, (mutex))
|
G_THREAD_CF (mutex_trylock, TRUE, (mutex))
|
||||||
# define g_mutex_unlock(mutex) \
|
# define g_mutex_unlock(mutex) \
|
||||||
G_THREAD_CF (mutex_unlock, (void)0, (mutex))
|
G_THREAD_CF (mutex_unlock, (void)0, (mutex))
|
||||||
|
# define g_mutex_free(mutex) \
|
||||||
|
G_THREAD_CF (mutex_free, (void)0, (mutex))
|
||||||
# define g_cond_wait(cond, mutex) \
|
# define g_cond_wait(cond, mutex) \
|
||||||
G_THREAD_CF (cond_wait, (void)0, (cond, mutex))
|
G_THREAD_CF (cond_wait, (void)0, (cond, mutex))
|
||||||
# define g_cond_timed_wait(cond, mutex, abs_time) \
|
# define g_cond_timed_wait(cond, mutex, abs_time) \
|
||||||
G_THREAD_CF (cond_timed_wait, TRUE, (cond, mutex, abs_time))
|
G_THREAD_CF (cond_timed_wait, TRUE, (cond, mutex, abs_time))
|
||||||
#else /* G_ERRORCHECK_MUTEXES */
|
#else /* G_ERRORCHECK_MUTEXES */
|
||||||
# define g_mutex_lock(mutex) \
|
# define g_mutex_lock(mutex) \
|
||||||
G_THREAD_ECF (mutex_lock, (void)0, mutex, void)
|
G_THREAD_ECF (mutex_lock, (void)0, (mutex), void)
|
||||||
# define g_mutex_trylock(mutex) \
|
# define g_mutex_trylock(mutex) \
|
||||||
G_THREAD_ECF (mutex_trylock, TRUE, mutex, gboolean)
|
G_THREAD_ECF (mutex_trylock, TRUE, (mutex), gboolean)
|
||||||
# define g_mutex_unlock(mutex) \
|
# define g_mutex_unlock(mutex) \
|
||||||
G_THREAD_ECF (mutex_unlock, (void)0, mutex, void)
|
G_THREAD_ECF (mutex_unlock, (void)0, (mutex), void)
|
||||||
|
# define g_mutex_free(mutex) \
|
||||||
|
G_THREAD_ECF (mutex_free, (void)0, (mutex), void)
|
||||||
# define g_cond_wait(cond, mutex) \
|
# define g_cond_wait(cond, mutex) \
|
||||||
(g_thread_supported () ? ((void(*)(GCond*, GMutex*, gulong, gchar*))\
|
(g_thread_supported () ? ((void(*)(GCond*, GMutex*, gulong, gchar*))\
|
||||||
g_thread_functions_for_glib_use.cond_wait) \
|
g_thread_functions_for_glib_use.cond_wait) \
|
||||||
@ -185,7 +189,6 @@ GMutex* g_static_mutex_get_mutex_impl (GMutex **mutex);
|
|||||||
|
|
||||||
#define g_thread_supported() (g_threads_got_initialized)
|
#define g_thread_supported() (g_threads_got_initialized)
|
||||||
#define g_mutex_new() G_THREAD_UF (mutex_new, ())
|
#define g_mutex_new() G_THREAD_UF (mutex_new, ())
|
||||||
#define g_mutex_free(mutex) G_THREAD_CF (mutex_free, (void)0, (mutex))
|
|
||||||
#define g_cond_new() G_THREAD_UF (cond_new, ())
|
#define g_cond_new() G_THREAD_UF (cond_new, ())
|
||||||
#define g_cond_signal(cond) G_THREAD_CF (cond_signal, (void)0, (cond))
|
#define g_cond_signal(cond) G_THREAD_CF (cond_signal, (void)0, (cond))
|
||||||
#define g_cond_broadcast(cond) G_THREAD_CF (cond_broadcast, (void)0, (cond))
|
#define g_cond_broadcast(cond) G_THREAD_CF (cond_broadcast, (void)0, (cond))
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2001-01-30 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
|
||||||
|
|
||||||
|
* gthread-impl.c (g_mutex_free_errorcheck_impl): Fixed it for
|
||||||
|
real. Sorry for this mess. It looked like a real obvious fix, so I
|
||||||
|
didn't check. Bad boy. Added some casts to quiet the compiler.
|
||||||
|
|
||||||
2001-01-29 Havoc Pennington <hp@redhat.com>
|
2001-01-29 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
* gthread-impl.c (g_mutex_free_errorcheck_impl): hack this so it
|
* gthread-impl.c (g_mutex_free_errorcheck_impl): hack this so it
|
||||||
|
@ -179,14 +179,19 @@ g_mutex_unlock_errorcheck_impl (GMutex *mutex,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
g_mutex_free_errorcheck_impl (GMutex *mutex)
|
g_mutex_free_errorcheck_impl (GMutex *mutex,
|
||||||
|
gulong magic,
|
||||||
|
gchar *location)
|
||||||
{
|
{
|
||||||
ErrorCheckInfo *info = G_MUTEX_DEBUG_INFO (mutex);
|
ErrorCheckInfo *info = G_MUTEX_DEBUG_INFO (mutex);
|
||||||
|
|
||||||
|
if (magic != G_MUTEX_DEBUG_MAGIC)
|
||||||
|
location = "unknown";
|
||||||
|
|
||||||
if (info && info->owner != NULL)
|
if (info && info->owner != NULL)
|
||||||
g_error ("Trying to free a locked mutex at '%s', "
|
g_error ("Trying to free a locked mutex at '%s', "
|
||||||
"which was previously locked at '%s'",
|
"which was previously locked at '%s'",
|
||||||
"FIXME", info->location);
|
location, info->location);
|
||||||
|
|
||||||
g_free (G_MUTEX_DEBUG_INFO (mutex));
|
g_free (G_MUTEX_DEBUG_INFO (mutex));
|
||||||
g_thread_functions_for_glib_use_default.mutex_free (mutex);
|
g_thread_functions_for_glib_use_default.mutex_free (mutex);
|
||||||
@ -259,7 +264,7 @@ g_cond_timed_wait_errorcheck_impl (GCond *cond,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* unshadow function declaration. See glib.h */
|
/* unshadow function declaration. See gthread.h */
|
||||||
#undef g_thread_init
|
#undef g_thread_init
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -277,9 +282,13 @@ g_thread_init_with_errorcheck_mutexes (GThreadFunctions* init)
|
|||||||
(gboolean (*)(GMutex *)) g_mutex_trylock_errorcheck_impl;
|
(gboolean (*)(GMutex *)) g_mutex_trylock_errorcheck_impl;
|
||||||
errorcheck_functions.mutex_unlock =
|
errorcheck_functions.mutex_unlock =
|
||||||
(void (*)(GMutex *)) g_mutex_unlock_errorcheck_impl;
|
(void (*)(GMutex *)) g_mutex_unlock_errorcheck_impl;
|
||||||
errorcheck_functions.mutex_free = g_mutex_free_errorcheck_impl;
|
errorcheck_functions.mutex_free =
|
||||||
errorcheck_functions.cond_wait = g_cond_wait_errorcheck_impl;
|
(void (*)(GMutex *)) g_mutex_free_errorcheck_impl;
|
||||||
errorcheck_functions.cond_timed_wait = g_cond_timed_wait_errorcheck_impl;
|
errorcheck_functions.cond_wait =
|
||||||
|
(void (*)(GCond *, GMutex *)) g_cond_wait_errorcheck_impl;
|
||||||
|
errorcheck_functions.cond_timed_wait =
|
||||||
|
(gboolean (*)(GCond *, GMutex *, GTimeVal *))
|
||||||
|
g_cond_timed_wait_errorcheck_impl;
|
||||||
|
|
||||||
g_thread_init (&errorcheck_functions);
|
g_thread_init (&errorcheck_functions);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user