diff options
author | Kaushik BV <kaushikbv@gluster.com> | 2010-09-06 03:28:06 +0000 |
---|---|---|
committer | Vijay Bellur <vijay@dev.gluster.com> | 2010-09-15 05:09:22 -0700 |
commit | 2ea1c2b68c46b8315790900291b18eb6f04010f9 (patch) | |
tree | acc246e4dc195477bcf8fbc4139cfc9b615824ab | |
parent | 703dbf354d53fdcc37851bb71420730675a7e170 (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.c | 13 | ||||
-rw-r--r-- | libglusterfs/src/statedump.c | 25 |
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); |