diff --git a/libvips/include/vips/internal.h b/libvips/include/vips/internal.h index 88bd7ea4..e9a78640 100644 --- a/libvips/include/vips/internal.h +++ b/libvips/include/vips/internal.h @@ -114,6 +114,7 @@ void vips__threadpool_init( void ); void vips__cache_init( void ); +void vips__sink_screen_init( void ); void vips__print_renders( void ); void vips__type_leak( void ); diff --git a/libvips/iofuncs/init.c b/libvips/iofuncs/init.c index 59f4e95f..db931cb8 100644 --- a/libvips/iofuncs/init.c +++ b/libvips/iofuncs/init.c @@ -384,6 +384,7 @@ vips_init( const char *argv0 ) #endif /*HAVE_THREAD_NEW*/ vips__threadpool_init(); + vips__sink_screen_init(); vips__buffer_init(); vips__meta_init(); diff --git a/libvips/iofuncs/sinkscreen.c b/libvips/iofuncs/sinkscreen.c index 4d57e9be..e7ae446d 100644 --- a/libvips/iofuncs/sinkscreen.c +++ b/libvips/iofuncs/sinkscreen.c @@ -1029,8 +1029,8 @@ render_thread_main( void *client ) return( NULL ); } -static void -vips_sink_screen_init( void ) +void +vips__sink_screen_init( void ) { g_assert( !render_thread ); g_assert( !render_dirty_lock ); @@ -1039,9 +1039,6 @@ vips_sink_screen_init( void ) render_thread = vips_g_thread_new( "sink_screen", render_thread_main, NULL ); vips_semaphore_init( &n_render_dirty_sem, 0, "n_render_dirty" ); - - g_assert( render_thread ); - g_assert( render_dirty_lock ); } /** @@ -1101,12 +1098,8 @@ vips_sink_screen( VipsImage *in, VipsImage *out, VipsImage *mask, int priority, VipsSinkNotify notify_fn, void *a ) { - static GOnce once = G_ONCE_INIT; - Render *render; - VIPS_ONCE( &once, (GThreadFunc) vips_sink_screen_init, NULL ); - if( tile_width <= 0 || tile_height <= 0 || max_tiles < -1 ) { vips_error( "vips_sink_screen", "%s", _( "bad parameters" ) );