From 40d6b788fdc3e464c2cc159ab4ee8a496172341e Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 20 Nov 2015 10:06:52 +0100 Subject: [SERVER] Improve image related locking --- src/server/image.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/server/image.c') diff --git a/src/server/image.c b/src/server/image.c index 06f669d..fccc2a9 100644 --- a/src/server/image.c +++ b/src/server/image.c @@ -175,9 +175,15 @@ void image_markComplete(dnbd3_image_t *image) */ void image_saveAllCacheMaps() { + spin_lock( &imageListLock ); for (int i = 0; i < _num_images; ++i) { + _images[i]->users++; + spin_unlock( &imageListLock ); image_saveCacheMap( _images[i] ); + spin_lock( &imageListLock ); + _images[i]->users--; } + spin_unlock( &imageListLock ); } /** @@ -359,8 +365,8 @@ void image_remove(dnbd3_image_t *image) _images[i] = NULL; if ( i + 1 == _num_images ) _num_images--; } - spin_unlock( &image->lock ); if ( image->users <= 0 ) image = image_free( image ); + spin_unlock( &image->lock ); spin_unlock( &imageListLock ); } -- cgit v1.2.3-55-g7522