summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/src/glfs.c4
-rw-r--r--libglusterfs/src/logging.c35
-rw-r--r--libglusterfs/src/logging.h2
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...) \