mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-10-31 08:22:16 +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:
		
				
					committed by
					
						 Sebastian Wilhelmi
						Sebastian Wilhelmi
					
				
			
			
				
	
			
			
			
						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> | ||||
|  | ||||
| 	* 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> | ||||
|  | ||||
| 	* 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> | ||||
|  | ||||
| 	* 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> | ||||
|  | ||||
| 	* 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> | ||||
|  | ||||
| 	* 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> | ||||
|  | ||||
| 	* 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> | ||||
|  | ||||
| 	* 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> | ||||
|  | ||||
| 	* glibconfig.h.win32.in: Use the same GMutex structure as the | ||||
|   | ||||
| @@ -147,7 +147,7 @@ GMutex* g_static_mutex_get_mutex_impl   (GMutex **mutex); | ||||
|  | ||||
| #define G_THREAD_UF(op, arglist)					\ | ||||
|     (*g_thread_functions_for_glib_use . op) arglist | ||||
| #define G_THREAD_CF(op, fail, arg) 					\ | ||||
| #define G_THREAD_CF(op, fail, arg)					\ | ||||
|     (g_thread_supported () ? G_THREAD_UF (op, arg) : (fail)) | ||||
| #define G_THREAD_ECF(op, fail, mutex, type)				\ | ||||
|     (g_thread_supported () ? ((type(*)(GMutex*, gulong, gchar*))	\ | ||||
| @@ -155,37 +155,40 @@ GMutex* g_static_mutex_get_mutex_impl   (GMutex **mutex); | ||||
|      (mutex, G_MUTEX_DEBUG_MAGIC, G_STRLOC) : (fail)) | ||||
|  | ||||
| #ifndef G_ERRORCHECK_MUTEXES | ||||
| # define g_mutex_lock(mutex)     					\ | ||||
| # define g_mutex_lock(mutex)						\ | ||||
|     G_THREAD_CF (mutex_lock,     (void)0, (mutex)) | ||||
| # define g_mutex_trylock(mutex)  					\ | ||||
| # define g_mutex_trylock(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)) | ||||
| # define g_cond_wait(cond, mutex) 					\ | ||||
| # define g_mutex_free(mutex)						\ | ||||
|     G_THREAD_CF (mutex_free,     (void)0, (mutex)) | ||||
| # define g_cond_wait(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)) | ||||
| #else /* G_ERRORCHECK_MUTEXES */ | ||||
| # define g_mutex_lock(mutex)   						\ | ||||
|     G_THREAD_ECF (mutex_lock,    (void)0, mutex, void) | ||||
| # define g_mutex_trylock(mutex) 					\ | ||||
|     G_THREAD_ECF (mutex_trylock, TRUE,    mutex, gboolean) | ||||
| # define g_mutex_unlock(mutex)  					\ | ||||
|     G_THREAD_ECF (mutex_unlock,  (void)0, mutex, void) | ||||
| # define g_mutex_lock(mutex)						\ | ||||
|     G_THREAD_ECF (mutex_lock,    (void)0, (mutex), void) | ||||
| # define g_mutex_trylock(mutex)						\ | ||||
|     G_THREAD_ECF (mutex_trylock, TRUE,    (mutex), gboolean) | ||||
| # define g_mutex_unlock(mutex)						\ | ||||
|     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)					\ | ||||
|     (g_thread_supported () ? ((void(*)(GCond*, GMutex*, gulong, gchar*))\ | ||||
|       g_thread_functions_for_glib_use.cond_wait)			\ | ||||
|         (cond, mutex, G_MUTEX_DEBUG_MAGIC, G_STRLOC) : (void) 0) | ||||
| # define g_cond_timed_wait(cond, mutex, abs_time) 			\ | ||||
|     (g_thread_supported () ? 						\ | ||||
| # define g_cond_timed_wait(cond, mutex, abs_time)			\ | ||||
|     (g_thread_supported () ?						\ | ||||
|       ((gboolean(*)(GCond*, GMutex*, GTimeVal*, gulong, gchar*))	\ | ||||
|         g_thread_functions_for_glib_use.cond_timed_wait) 		\ | ||||
|         g_thread_functions_for_glib_use.cond_timed_wait)		\ | ||||
|           (cond, mutex, abs_time, G_MUTEX_DEBUG_MAGIC, G_STRLOC) : TRUE) | ||||
| #endif /* G_ERRORCHECK_MUTEXES */ | ||||
|  | ||||
| #define g_thread_supported()    (g_threads_got_initialized) | ||||
| #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_signal(cond)      G_THREAD_CF (cond_signal,    (void)0, (cond)) | ||||
| #define g_cond_broadcast(cond)   G_THREAD_CF (cond_broadcast, (void)0, (cond)) | ||||
|   | ||||
							
								
								
									
										35
									
								
								gthread.h
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								gthread.h
									
									
									
									
									
								
							| @@ -147,7 +147,7 @@ GMutex* g_static_mutex_get_mutex_impl   (GMutex **mutex); | ||||
|  | ||||
| #define G_THREAD_UF(op, arglist)					\ | ||||
|     (*g_thread_functions_for_glib_use . op) arglist | ||||
| #define G_THREAD_CF(op, fail, arg) 					\ | ||||
| #define G_THREAD_CF(op, fail, arg)					\ | ||||
|     (g_thread_supported () ? G_THREAD_UF (op, arg) : (fail)) | ||||
| #define G_THREAD_ECF(op, fail, mutex, type)				\ | ||||
|     (g_thread_supported () ? ((type(*)(GMutex*, gulong, gchar*))	\ | ||||
| @@ -155,37 +155,40 @@ GMutex* g_static_mutex_get_mutex_impl   (GMutex **mutex); | ||||
|      (mutex, G_MUTEX_DEBUG_MAGIC, G_STRLOC) : (fail)) | ||||
|  | ||||
| #ifndef G_ERRORCHECK_MUTEXES | ||||
| # define g_mutex_lock(mutex)     					\ | ||||
| # define g_mutex_lock(mutex)						\ | ||||
|     G_THREAD_CF (mutex_lock,     (void)0, (mutex)) | ||||
| # define g_mutex_trylock(mutex)  					\ | ||||
| # define g_mutex_trylock(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)) | ||||
| # define g_cond_wait(cond, mutex) 					\ | ||||
| # define g_mutex_free(mutex)						\ | ||||
|     G_THREAD_CF (mutex_free,     (void)0, (mutex)) | ||||
| # define g_cond_wait(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)) | ||||
| #else /* G_ERRORCHECK_MUTEXES */ | ||||
| # define g_mutex_lock(mutex)   						\ | ||||
|     G_THREAD_ECF (mutex_lock,    (void)0, mutex, void) | ||||
| # define g_mutex_trylock(mutex) 					\ | ||||
|     G_THREAD_ECF (mutex_trylock, TRUE,    mutex, gboolean) | ||||
| # define g_mutex_unlock(mutex)  					\ | ||||
|     G_THREAD_ECF (mutex_unlock,  (void)0, mutex, void) | ||||
| # define g_mutex_lock(mutex)						\ | ||||
|     G_THREAD_ECF (mutex_lock,    (void)0, (mutex), void) | ||||
| # define g_mutex_trylock(mutex)						\ | ||||
|     G_THREAD_ECF (mutex_trylock, TRUE,    (mutex), gboolean) | ||||
| # define g_mutex_unlock(mutex)						\ | ||||
|     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)					\ | ||||
|     (g_thread_supported () ? ((void(*)(GCond*, GMutex*, gulong, gchar*))\ | ||||
|       g_thread_functions_for_glib_use.cond_wait)			\ | ||||
|         (cond, mutex, G_MUTEX_DEBUG_MAGIC, G_STRLOC) : (void) 0) | ||||
| # define g_cond_timed_wait(cond, mutex, abs_time) 			\ | ||||
|     (g_thread_supported () ? 						\ | ||||
| # define g_cond_timed_wait(cond, mutex, abs_time)			\ | ||||
|     (g_thread_supported () ?						\ | ||||
|       ((gboolean(*)(GCond*, GMutex*, GTimeVal*, gulong, gchar*))	\ | ||||
|         g_thread_functions_for_glib_use.cond_timed_wait) 		\ | ||||
|         g_thread_functions_for_glib_use.cond_timed_wait)		\ | ||||
|           (cond, mutex, abs_time, G_MUTEX_DEBUG_MAGIC, G_STRLOC) : TRUE) | ||||
| #endif /* G_ERRORCHECK_MUTEXES */ | ||||
|  | ||||
| #define g_thread_supported()    (g_threads_got_initialized) | ||||
| #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_signal(cond)      G_THREAD_CF (cond_signal,    (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> | ||||
|  | ||||
| 	* 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 | ||||
| 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); | ||||
|    | ||||
|   if (magic != G_MUTEX_DEBUG_MAGIC) | ||||
|     location = "unknown"; | ||||
|  | ||||
|   if (info && info->owner != NULL) | ||||
|     g_error ("Trying to free a locked mutex at '%s', " | ||||
| 	     "which was previously locked at '%s'",  | ||||
| 	     "FIXME", info->location); | ||||
| 	     location, info->location); | ||||
|  | ||||
|   g_free (G_MUTEX_DEBUG_INFO (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 | ||||
|  | ||||
| void  | ||||
| @@ -277,9 +282,13 @@ g_thread_init_with_errorcheck_mutexes (GThreadFunctions* init) | ||||
|     (gboolean (*)(GMutex *)) g_mutex_trylock_errorcheck_impl; | ||||
|   errorcheck_functions.mutex_unlock =  | ||||
|     (void (*)(GMutex *)) g_mutex_unlock_errorcheck_impl; | ||||
|   errorcheck_functions.mutex_free = g_mutex_free_errorcheck_impl; | ||||
|   errorcheck_functions.cond_wait = g_cond_wait_errorcheck_impl; | ||||
|   errorcheck_functions.cond_timed_wait = g_cond_timed_wait_errorcheck_impl; | ||||
|   errorcheck_functions.mutex_free =  | ||||
|     (void (*)(GMutex *)) g_mutex_free_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); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user