summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/server/image.c8
1 files changed, 7 insertions, 1 deletions
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 );
}