safer stop-early logic in tilecache

Don't actually stop the tilecache loop early, since that could deadlock,
instead just stop fetching from the pipeline.

see https://github.com/libvips/libvips/pull/2424
This commit is contained in:
John Cupitt 2021-09-05 12:55:52 +01:00
parent e7889ff8e1
commit 99724e6097

View File

@ -632,8 +632,7 @@ vips_tile_cache_gen( VipsRegion *or,
*/
work = vips_tile_cache_ref( cache, r );
while( work &&
!*stop ) {
while( work ) {
/* Search for data tiles: easy, we can just paste those in.
*/
for(;;) {
@ -679,10 +678,14 @@ vips_tile_cache_gen( VipsRegion *or,
if( cache->threaded )
g_mutex_unlock( cache->lock );
result = vips_region_prepare_to( in,
tile->region,
&tile->pos,
tile->pos.left, tile->pos.top );
/* Don't compute if we've seen an error
* previously.
*/
if( !result )
result = vips_region_prepare_to( in,
tile->region,
&tile->pos,
tile->pos.left, tile->pos.top );
if( cache->threaded ) {
VIPS_GATE_START( "vips_tile_cache_gen: "