diff options
author | Simon Rettberg | 2015-11-20 10:06:52 +0100 |
---|---|---|
committer | Simon Rettberg | 2015-11-20 10:06:52 +0100 |
commit | 40d6b788fdc3e464c2cc159ab4ee8a496172341e (patch) | |
tree | 1b1e0674c66fc2667abc2252b982a34e69e44f13 | |
parent | [SERVER] Check uplink server for newer revision than local if client requests... (diff) | |
download | dnbd3-40d6b788fdc3e464c2cc159ab4ee8a496172341e.tar.gz dnbd3-40d6b788fdc3e464c2cc159ab4ee8a496172341e.tar.xz dnbd3-40d6b788fdc3e464c2cc159ab4ee8a496172341e.zip |
[SERVER] Improve image related locking
-rw-r--r-- | src/server/image.c | 8 |
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 ); } |