From 911d4130c6ab1e41e2c57c8ba6454b37633f8750 Mon Sep 17 00:00:00 2001 From: ln-tech Date: Sun, 12 Jan 2020 21:24:14 +0100 Subject: leak fix in main --- src/fuse/connection.c | 3 ++- src/fuse/connection.h | 3 ++- src/fuse/main.c | 11 ++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) (limited to 'src/fuse') diff --git a/src/fuse/connection.c b/src/fuse/connection.c index f16eb1e..7a28649 100644 --- a/src/fuse/connection.c +++ b/src/fuse/connection.c @@ -31,7 +31,7 @@ static const int FAIL_BACKOFF_START_COUNT = 8; static bool connectionInitDone = false; static bool threadInitDone = false; static pthread_mutex_t mutexInit = PTHREAD_MUTEX_INITIALIZER; -bool keepRunning = true; +atomic_bool keepRunning = true; static bool learnNewServers; // List of pending requests @@ -425,6 +425,7 @@ static void* connection_receiveThreadMain(void *sockPtr) } } } + if(!keepRunning) connection_close(); logadd( LOG_DEBUG1, "Aus der Schleife rausgeflogen! ARRRRRRRRRR" ); fail:; // Make sure noone is trying to use the socket for sending by locking, diff --git a/src/fuse/connection.h b/src/fuse/connection.h index 15075d5..c64806c 100644 --- a/src/fuse/connection.h +++ b/src/fuse/connection.h @@ -3,6 +3,7 @@ #include "../shared/fdsignal.h" #include "../shared/timing.h" +#include #include #include #include @@ -10,7 +11,7 @@ #include -extern bool keepRunning; +extern atomic_bool keepRunning; struct _dnbd3_async; typedef struct _dnbd3_async { diff --git a/src/fuse/main.c b/src/fuse/main.c index df85bc2..26cae50 100644 --- a/src/fuse/main.c +++ b/src/fuse/main.c @@ -46,7 +46,6 @@ static struct timespec startupTime; static uid_t owner; static void (*fuse_sigIntHandler)(int) = NULL; static void (*fuse_sigTermHandler)(int) = NULL; -//static struct fuse_operations dnbd3_fuse_no_operations; static int reply_buf_limited(fuse_req_t req, const char *buf, size_t bufsize, off_t off, size_t maxsize); static int fillStatsFile(char *buf, size_t size, off_t offset); @@ -173,7 +172,7 @@ static void image_ll_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info else if ((fi->flags & 3) != O_RDONLY) fuse_reply_err(req, EACCES); else { - // auto caching + // auto caching fi->keep_cache = 1; fuse_reply_open(req, fi); } @@ -274,12 +273,12 @@ static void image_ll_init(void *userdata, struct fuse_conn_info *conn) logadd( LOG_ERROR, "Could not initialize threads for dnbd3 connection, exiting..." ); exit( EXIT_FAILURE ); } + // Prepare our handler struct sigaction newHandler; memset( &newHandler, 0, sizeof(newHandler) ); newHandler.sa_handler = &image_sigHandler; sigemptyset( &newHandler.sa_mask ); - struct sigaction oldHandler; // Retrieve old handlers when setting sigaction( SIGINT, &newHandler, &oldHandler ); @@ -288,6 +287,7 @@ static void image_ll_init(void *userdata, struct fuse_conn_info *conn) sigaction( SIGTERM, &newHandler, &oldHandler ); fuse_sigTermHandler = oldHandler.sa_handler; logadd( LOG_DEBUG1, "Previous SIGTERM handler was %p", (void*)(uintptr_t)fuse_sigIntHandler ); + return NULL; } /* close the connection */ @@ -367,6 +367,7 @@ int main(int argc, char *argv[]) bool single_thread = false; struct fuse_chan *ch; char *mountpoint; + int foreground = 0; int fuse_err; if ( argc <= 1 || strcmp( argv[1], "--help" ) == 0 || strcmp( argv[1], "--usage" ) == 0 ) { @@ -381,6 +382,7 @@ int main(int argc, char *argv[]) newArgv = calloc( argc + 10, sizeof(char*) ); newArgv[0] = argv[0]; newArgc = 1; + while ( ( opt = getopt_long( argc, argv, optString, longOpts, &lidx ) ) != -1 ) { switch ( opt ) { case 'h': @@ -419,6 +421,7 @@ int main(int argc, char *argv[]) case 'd': useDebug = true; newArgv[newArgc++] = "-d"; + foreground = 1; break; case 's': single_thread = true; @@ -487,6 +490,7 @@ int main(int argc, char *argv[]) if (se != NULL) { if (fuse_set_signal_handlers(se) != -1) { fuse_session_add_chan(se, ch); + //fuse_daemonize(foreground); if (single_thread) fuse_err = fuse_session_loop(se); else fuse_err = fuse_session_loop_mt(se); //MT produces errors (race conditions) in libfuse and didnt improve speed at all fuse_remove_signal_handlers(se); @@ -497,6 +501,7 @@ int main(int argc, char *argv[]) fuse_unmount(mountpoint, ch); } fuse_opt_free_args(&args); + free(newArgv); logadd( LOG_DEBUG1, "Terminating. FUSE REPLIED: %d\n", fuse_err); return fuse_err; } -- cgit v1.2.3-55-g7522