diff options
-rw-r--r-- | api/src/glfs.c | 4 | ||||
-rw-r--r-- | libglusterfs/src/logging.c | 35 | ||||
-rw-r--r-- | libglusterfs/src/logging.h | 2 |
3 files changed, 38 insertions, 3 deletions
diff --git a/api/src/glfs.c b/api/src/glfs.c index 29ed47c0c61..1bae78d2378 100644 --- a/api/src/glfs.c +++ b/api/src/glfs.c @@ -666,8 +666,8 @@ glfs_fini (struct glfs *fs) glfs_subvol_done (fs, subvol); - if (ctx->log.logfile) - fclose (ctx->log.logfile); + if (gf_log_fini(ctx) != 0) + ret = -1; return ret; } diff --git a/libglusterfs/src/logging.c b/libglusterfs/src/logging.c index e3a4a9fde09..0058233a7cf 100644 --- a/libglusterfs/src/logging.c +++ b/libglusterfs/src/logging.c @@ -108,11 +108,44 @@ gf_log_set_xl_loglevel (void *this, gf_loglevel_t level) } void -gf_log_fini (void) +gf_log_globals_fini (void) { pthread_mutex_destroy (&THIS->ctx->log.logfile_mutex); } +/** gf_log_fini - function to perform the cleanup of the log information + * @data - glusterfs context + * @return: success: 0 + * failure: -1 + */ +int +gf_log_fini (void *data) +{ + glusterfs_ctx_t *ctx = data; + int ret = 0; + + if (ctx == NULL) { + ret = -1; + goto out; + } + + pthread_mutex_lock (&ctx->log.logfile_mutex); + { + if (ctx->log.logfile) { + if (fclose (ctx->log.logfile) != 0) + ret = -1; + /* Logfile needs to be set to NULL, so that any + call to gf_log after calling gf_log_fini, will + log the message to stderr. + */ + ctx->log.logfile = NULL; + } + } + pthread_mutex_unlock (&ctx->log.logfile_mutex); + + out: + return ret; +} #ifdef GF_USE_SYSLOG /** diff --git a/libglusterfs/src/logging.h b/libglusterfs/src/logging.h index cc806a76712..e2b7e664d0f 100644 --- a/libglusterfs/src/logging.h +++ b/libglusterfs/src/logging.h @@ -153,6 +153,8 @@ int gf_cmd_log_init (const char *filename); void set_sys_log_level (gf_loglevel_t level); +int gf_log_fini(void *data); + #define GF_DEBUG(xl, format, args...) \ gf_log ((xl)->name, GF_LOG_DEBUG, format, ##args) #define GF_INFO(xl, format, args...) \ |