diff options
author | Simon Rettberg | 2015-12-16 18:20:55 +0100 |
---|---|---|
committer | Simon Rettberg | 2015-12-16 18:20:55 +0100 |
commit | 2bc1381256c860b6deb3044d3263cea625118793 (patch) | |
tree | faab7420d098dde40b8fc86bb8d51efcb5811205 | |
parent | [SERVER] Fix image_calcBlockCrc32: Use 64bit for fileSize param (diff) | |
download | dnbd3-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.c | 6 | ||||
-rw-r--r-- | src/server/server.c | 6 |
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 ); |