diff options
author | Vikas Gorur <vikas@gluster.com> | 2009-11-18 05:20:08 +0000 |
---|---|---|
committer | Anand V. Avati <avati@dev.gluster.com> | 2009-11-18 05:55:58 -0800 |
commit | 8f0ec7204d4b79dfb9fcf5f61df6275f6d4896fb (patch) | |
tree | 8a51c938bf6b039ce92d32486967e1341d028d1d | |
parent | 4b233c6341134d11b170fa4cdbafc49246b46975 (diff) |
libglusterfs: Fix error handling in _gf_log.
Unlock the mutex when an error occurs instead of jumping
straight to "out".
Signed-off-by: Vikas Gorur <vikas@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 394 (Possible deadlock in _gf_log)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=394
-rw-r--r-- | libglusterfs/src/logging.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/libglusterfs/src/logging.c b/libglusterfs/src/logging.c index c5ffedbeb..46b3ac5af 100644 --- a/libglusterfs/src/logging.c +++ b/libglusterfs/src/logging.c @@ -494,12 +494,12 @@ log: basename, line, function, domain); if (-1 == ret) { - goto out; + goto unlock; } ret = vasprintf (&str2, fmt, ap); if (-1 == ret) { - goto out; + goto unlock; } va_end (ap); @@ -513,9 +513,10 @@ log: fprintf (logfile, "%s\n", msg); fflush (logfile); } +unlock: pthread_mutex_unlock (&logfile_mutex); - if (__central_log_enabled && + if ((ret != -1) && __central_log_enabled && ((glusterfs_central_log_flag_get ()) == 0)) { glusterfs_central_log_flag_set (); @@ -524,11 +525,15 @@ log: } glusterfs_central_log_flag_unset (); } - - FREE (msg); - FREE (str1); - FREE (str2); + if (msg) + FREE (msg); + + if (str1) + FREE (str1); + + if (str2) + FREE (str2); out: return (0); |