diff --git a/libvips/iofuncs/memory.c b/libvips/iofuncs/memory.c index 5868675037..f70a726d30 100644 --- a/libvips/iofuncs/memory.c +++ b/libvips/iofuncs/memory.c @@ -262,13 +262,19 @@ vips_tracked_free( void *s ) VIPS_GATE_FREE( size ); } +static void +vips_tracked_init_mutex( void ) +{ + vips_tracked_mutex = vips_g_mutex_new(); +} + static void vips_tracked_init( void ) { static GOnce vips_tracked_once = G_ONCE_INIT; - vips_tracked_mutex = g_once( &vips_tracked_once, - (GThreadFunc) vips_g_mutex_new, NULL ); + g_once( &vips_tracked_once, + (GThreadFunc) vips_tracked_init_mutex, NULL ); } /** diff --git a/libvips/iofuncs/object.c b/libvips/iofuncs/object.c index bb520456e0..b672fda11e 100644 --- a/libvips/iofuncs/object.c +++ b/libvips/iofuncs/object.c @@ -2772,20 +2772,20 @@ vips_class_add_hash( VipsObjectClass *class, GHashTable *table ) return( NULL ); } -static void * +static void vips_class_build_hash( void ) { - GHashTable *table; GType base; - table = g_hash_table_new( g_str_hash, g_str_equal ); + vips__object_nickname_table = + g_hash_table_new( g_str_hash, g_str_equal ); - if( !(base = g_type_from_name( "VipsObject" )) ) - return( NULL ); - vips_class_map_all( base, - (VipsClassMapFn) vips_class_add_hash, (void *) table ); + base = g_type_from_name( "VipsObject" ); + g_assert( base ); - return( table ); + vips_class_map_all( base, + (VipsClassMapFn) vips_class_add_hash, + (void *) vips__object_nickname_table ); } /** @@ -2814,8 +2814,7 @@ vips_type_find( const char *basename, const char *nickname ) GType base; GType type; - vips__object_nickname_table = (GHashTable *) g_once( &once, - (GThreadFunc) vips_class_build_hash, NULL ); + g_once( &once, (GThreadFunc) vips_class_build_hash, NULL ); hit = (NicknameGType *) g_hash_table_lookup( vips__object_nickname_table,