summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2015-12-16 18:20:55 +0100
committerSimon Rettberg2015-12-16 18:20:55 +0100
commit2bc1381256c860b6deb3044d3263cea625118793 (patch)
treefaab7420d098dde40b8fc86bb8d51efcb5811205
parent[SERVER] Fix image_calcBlockCrc32: Use 64bit for fileSize param (diff)
downloaddnbd3-2bc1381256c860b6deb3044d3263cea625118793.tar.gz
dnbd3-2bc1381256c860b6deb3044d3263cea625118793.tar.xz
dnbd3-2bc1381256c860b6deb3044d3263cea625118793.zip
[SERVER] Cancel scanning of image dir if _shutdown is set
So you can cancel image loading on startup via Ctrl-C
-rw-r--r--src/server/image.c6
-rw-r--r--src/server/server.c6
2 files changed, 8 insertions, 4 deletions
diff --git a/src/server/image.c b/src/server/image.c
index a7f71c4..1d1d6b7 100644
--- a/src/server/image.c
+++ b/src/server/image.c
@@ -464,7 +464,8 @@ bool image_loadAll(char *path)
// Check if all loaded images still exist on disk
logadd( LOG_DEBUG1, "Checking for vanished images" );
spin_lock( &imageListLock );
- for (int i = _num_images - 1; i >= 0; --i) {
+ for ( int i = _num_images - 1; i >= 0; --i ) {
+ if ( _shutdown ) break;
if ( _images[i] == NULL ) {
if ( i + 1 == _num_images ) _num_images--;
continue;
@@ -488,6 +489,7 @@ bool image_loadAll(char *path)
spin_lock( &imageListLock );
}
spin_unlock( &imageListLock );
+ if ( _shutdown ) return true;
}
// Now scan for new images
logadd( LOG_DEBUG1, "Scanning for new or modified images" );
@@ -584,7 +586,7 @@ static bool image_load_all_internal(char *base, char *path)
const int len = pathLen + SUBDIR_LEN + 1;
char subpath[len];
struct stat st;
- while ( (entry = readdir( dir )) != NULL ) {
+ while ( !_shutdown && (entry = readdir( dir )) != NULL ) {
if ( strcmp( entry->d_name, "." ) == 0 || strcmp( entry->d_name, ".." ) == 0 ) continue;
if ( strlen( entry->d_name ) > SUBDIR_LEN ) {
logadd( LOG_WARNING, "Skipping entry %s: Too long (max %d bytes)", entry->d_name, (int)SUBDIR_LEN );
diff --git a/src/server/server.c b/src/server/server.c
index ffa817f..dd71312 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -286,9 +286,11 @@ int main(int argc, char *argv[])
logadd( LOG_INFO, "Loading images...." );
// Load all images in base path
- if ( !image_loadAll( NULL ) ) {
+ if ( !image_loadAll( NULL ) || _shutdown ) {
logadd( LOG_ERROR, "Could not load images." );
- return EXIT_FAILURE;
+ free( bindAddress );
+ dnbd3_cleanup();
+ return 0;
}
startupTime = time( NULL );