summaryrefslogtreecommitdiffstats
path: root/libglusterfs
diff options
context:
space:
mode:
authorNiels de Vos <ndevos@redhat.com>2014-04-29 13:54:53 -0700
committerNiels de Vos <ndevos@redhat.com>2014-06-08 00:28:29 -0700
commit47732e9742ae1f898f161b4244e7faed74c98756 (patch)
treeb178752c76fbe0d740e28d3ba9bf235df9d52b78 /libglusterfs
parentcf8029c55f3efc80b17b2ce3442864643e2fe917 (diff)
logging: use duplicate stderr, instead of re-opening
The special filename "-" is supposed to log to stderr. Instead of trying to explictly open "/dev/stderr" again (which may not be possible as permissions might have changed by then), dup the stderr and use the copy. It is not a good idea to use @stderr global variable directly, as ctx->log.logfile is fclose()d in glfs_fini() (was fixed in http://review.gluster.org/6452) Cherry picked from commit 15ea78fffd63756fecf2f15887d3cad6a13d2a34: > BUG: 1088589 > Signed-off-by: Anand Avati <avati@redhat.com> > Reviewed-on: http://review.gluster.org/7607 > Tested-by: Gluster Build System <jenkins@build.gluster.com> > Reviewed-by: Vijay Bellur <vbellur@redhat.com> Change-Id: Ia6c538fe363905588dcf4fc4783804073956a586 BUG: 1103413 Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: http://review.gluster.org/7938 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Harshavardhana <harsha@harshavardhana.net>
Diffstat (limited to 'libglusterfs')
-rw-r--r--libglusterfs/src/logging.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/libglusterfs/src/logging.c b/libglusterfs/src/logging.c
index 4a905a24def..bb1b9884ae6 100644
--- a/libglusterfs/src/logging.c
+++ b/libglusterfs/src/logging.c
@@ -366,7 +366,29 @@ gf_log_init (void *data, const char *file, const char *ident)
}
if (strcmp (file, "-") == 0) {
- file = "/dev/stderr";
+ int dupfd = -1;
+
+ ctx->log.filename = gf_strdup ("/dev/stderr");
+ if (!ctx->log.filename) {
+ fprintf (stderr, "ERROR: strdup failed\n");
+ return -1;
+ }
+
+ dupfd = dup (fileno (stderr));
+ if (dupfd == -1) {
+ fprintf (stderr, "ERROR: could not dup %d (%s)\n",
+ fileno (stderr), strerror (errno));
+ return -1;
+ }
+
+ ctx->log.logfile = fdopen (dupfd, "a");
+ if (!ctx->log.logfile) {
+ fprintf (stderr, "ERROR: could not fdopen on %d (%s)\n",
+ dupfd, strerror (errno));
+ return -1;
+ }
+
+ goto out;
}
ctx->log.filename = gf_strdup (file);
@@ -390,7 +412,7 @@ gf_log_init (void *data, const char *file, const char *ident)
file, strerror (errno));
return -1;
}
-
+out:
ctx->log.gf_log_logfile = ctx->log.logfile;
return 0;