From 2bc1381256c860b6deb3044d3263cea625118793 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 16 Dec 2015 18:20:55 +0100 Subject: [SERVER] Cancel scanning of image dir if _shutdown is set So you can cancel image loading on startup via Ctrl-C --- src/server/image.c | 6 ++++-- 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 ); -- cgit v1.2.3-55-g7522