summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaushik BV <kaushikbv@gluster.com>2010-09-06 03:28:06 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-09-15 05:09:22 -0700
commit2ea1c2b68c46b8315790900291b18eb6f04010f9 (patch)
treeacc246e4dc195477bcf8fbc4139cfc9b615824ab
parent703dbf354d53fdcc37851bb71420730675a7e170 (diff)
Deadlock in state dumping while holding the logging lock
Signed-off-by: Kaushik BV <kaushikbv@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 976 (Deadlock in state dumping while holding the logging lock) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=976
-rw-r--r--glusterfsd/src/glusterfsd.c13
-rw-r--r--libglusterfs/src/statedump.c25
2 files changed, 13 insertions, 25 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c
index bd2d704b800..0fd739cb421 100644
--- a/glusterfsd/src/glusterfsd.c
+++ b/glusterfsd/src/glusterfsd.c
@@ -1153,15 +1153,9 @@ glusterfs_sigwaiter (void *arg)
for (;;) {
ret = sigwait (&set, &sig);
- if (ret) {
- gf_log ("sigwaiter", GF_LOG_ERROR,
- "sigwait returned error (%s)",
- strerror (ret));
+ if (ret)
continue;
- }
-
- gf_log ("sigwaiter", GF_LOG_DEBUG,
- "received signal %d", sig);
+
switch (sig) {
case SIGINT:
@@ -1178,8 +1172,7 @@ glusterfs_sigwaiter (void *arg)
gf_latency_toggle (sig);
break;
default:
- gf_log ("sigwaiter", GF_LOG_ERROR,
- "unhandled signal: %d", sig);
+
break;
}
}
diff --git a/libglusterfs/src/statedump.c b/libglusterfs/src/statedump.c
index 05f1a777fad..230e7c2ef30 100644
--- a/libglusterfs/src/statedump.c
+++ b/libglusterfs/src/statedump.c
@@ -66,11 +66,8 @@ gf_proc_dump_open (void)
snprintf (path, sizeof (path), "%s.%d", GF_DUMP_LOGFILE_ROOT, getpid ());
dump_fd = open (path, O_CREAT|O_RDWR|O_TRUNC|O_APPEND, 0600);
- if (dump_fd < 0) {
- gf_log("", GF_LOG_ERROR, "Unable to open file: %s"
- " errno: %d", path, errno);
+ if (dump_fd < 0)
return -1;
- }
gf_dump_fd = dump_fd;
return 0;
@@ -104,8 +101,6 @@ gf_proc_dump_add_section (char *key, ...)
snprintf (buf + strlen(buf),
GF_DUMP_MAX_BUF_LEN - strlen (buf), "]\n");
ret = write (gf_dump_fd, buf, strlen (buf));
- if (ret < 0)
- gf_log("", GF_LOG_ERROR, "write error: %s", strerror(errno));
}
@@ -133,8 +128,6 @@ gf_proc_dump_write (char *key, char *value,...)
offset = strlen (buf);
snprintf (buf + offset, GF_DUMP_MAX_BUF_LEN - offset, "\n");
ret = write (gf_dump_fd, buf, strlen (buf));
- if (ret < 0)
- gf_log("", GF_LOG_ERROR, "write error: %s", strerror(errno));
}
static void
@@ -220,8 +213,7 @@ gf_proc_dump_xlator_info (xlator_t *this_xl)
return;
if (ctx->master){
-
- gf_log ("", GF_LOG_DEBUG, "Dumping Proc for fuse Xlator");
+
fuse_xlator = (xlator_t *) ctx->master;
if (!fuse_xlator->dumpops)
@@ -286,7 +278,7 @@ gf_proc_dump_parse_set_option (char *key, char *value)
{
gf_boolean_t *opt_key = NULL;
gf_boolean_t opt_value = _gf_false;
-
+ char buf[GF_DUMP_MAX_BUF_LEN];
if (!strncasecmp (key, "mem", 3)) {
opt_key = &dump_options.dump_mem;
@@ -304,8 +296,10 @@ gf_proc_dump_parse_set_option (char *key, char *value)
if (!opt_key) {
//None of dump options match the key, return back
- gf_log ("", GF_LOG_WARNING, "None of the options matched key"
- ": %s", key);
+ snprintf (buf, sizeof (buf), "[Warning]:None of the options "
+ "matched key : %s\n", key);
+ write (gf_dump_fd, buf, strlen (buf));
+
return -1;
}
@@ -353,6 +347,7 @@ gf_proc_dump_options_init ()
int ret = -1;
FILE *fp = NULL;
char buf[256];
+ char dumpbuf[GF_DUMP_MAX_BUF_LEN];
char *key = NULL, *value = NULL;
char *saveptr = NULL;
@@ -384,8 +379,8 @@ gf_proc_dump_options_init ()
continue;
}
- gf_log ("", GF_LOG_DEBUG, "key = %s, value = %s",
- key, value);
+ snprintf (dumpbuf, sizeof (dumpbuf), "[Debug]:key=%s, value=%s\n",key,value);
+ write (gf_dump_fd, dumpbuf, strlen (dumpbuf));
gf_proc_dump_parse_set_option (key, value);