do not call g_thread_init() for glib >= 2.31
glib >= 2.31 always enables thread support and g_thread_supported() is #defined to 1, there's no need to call g_thread_init() anymore, and it definitely does not need to report error which never happens. Keep code for old < 2.31 glibc anyway for now, just #ifdef it differently. Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Cc: qemu-trivial@nongnu.org
This commit is contained in:
		
							parent
							
								
									69b15212d7
								
							
						
					
					
						commit
						f33cc84dd4
					
				| @ -115,14 +115,11 @@ static inline GThread *create_thread(GThreadFunc func, gpointer data) | ||||
| 
 | ||||
| static void __attribute__((constructor)) coroutine_init(void) | ||||
| { | ||||
|     if (!g_thread_supported()) { | ||||
| #if !GLIB_CHECK_VERSION(2, 31, 0) | ||||
|     if (!g_thread_supported()) { | ||||
|         g_thread_init(NULL); | ||||
| #else | ||||
|         fprintf(stderr, "glib threading failed to initialize.\n"); | ||||
|         exit(1); | ||||
| #endif | ||||
|     } | ||||
| #endif | ||||
| 
 | ||||
|     init_coroutine_cond(); | ||||
| } | ||||
|  | ||||
							
								
								
									
										21
									
								
								util/osdep.c
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								util/osdep.c
									
									
									
									
									
								
							| @ -436,23 +436,20 @@ int socket_init(void) | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| /* Ensure that glib is running in multi-threaded mode */ | ||||
| #if !GLIB_CHECK_VERSION(2, 31, 0) | ||||
| /* Ensure that glib is running in multi-threaded mode
 | ||||
|  * Old versions of glib require explicit initialization.  Failure to do | ||||
|  * this results in the single-threaded code paths being taken inside | ||||
|  * glib.  For example, the g_slice allocator will not be thread-safe | ||||
|  * and cause crashes. | ||||
|  */ | ||||
| static void __attribute__((constructor)) thread_init(void) | ||||
| { | ||||
|     if (!g_thread_supported()) { | ||||
| #if !GLIB_CHECK_VERSION(2, 31, 0) | ||||
|         /* Old versions of glib require explicit initialization.  Failure to do
 | ||||
|          * this results in the single-threaded code paths being taken inside | ||||
|          * glib.  For example, the g_slice allocator will not be thread-safe | ||||
|          * and cause crashes. | ||||
|          */ | ||||
|         g_thread_init(NULL); | ||||
| #else | ||||
|         fprintf(stderr, "glib threading failed to initialize.\n"); | ||||
|         exit(1); | ||||
| #endif | ||||
|        g_thread_init(NULL); | ||||
|     } | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #ifndef CONFIG_IOVEC | ||||
| /* helper function for iov_send_recv() */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Michael Tokarev
						Michael Tokarev