summaryrefslogtreecommitdiffstats
path: root/xlators/features/changelog
diff options
context:
space:
mode:
authorVijay Bellur <vbellur@redhat.com>2018-08-13 12:20:07 -0700
committerAmar Tumballi <amarts@redhat.com>2018-08-17 07:51:41 +0000
commit522352d4b123d66f7d0b57c287ed7367deba0f31 (patch)
treedbef2f8adec9515075cba93de38ceaa4e9cc708f /xlators/features/changelog
parent0058f6df0d2bd1dedc453585e6c4076df7b51fde (diff)
features/changelog: Fix missing unlocks
Addresses CID 1210981 Change-Id: Icd325588ae0639e09d924fdde171931dedd06ca6 updates: bz#789278 Signed-off-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/features/changelog')
-rw-r--r--xlators/features/changelog/src/changelog-helpers.c10
-rw-r--r--xlators/features/changelog/src/changelog-helpers.h13
2 files changed, 19 insertions, 4 deletions
diff --git a/xlators/features/changelog/src/changelog-helpers.c b/xlators/features/changelog/src/changelog-helpers.c
index 4ab3c8429d1..81bd99bcb7d 100644
--- a/xlators/features/changelog/src/changelog-helpers.c
+++ b/xlators/features/changelog/src/changelog-helpers.c
@@ -1803,8 +1803,9 @@ changelog_dec_fop_cnt (xlator_t *this, changelog_priv_t *priv,
priv->dm.drain_wait_black == _gf_true) {
ret = pthread_cond_signal (
&priv->dm.drain_black_cond);
- CHANGELOG_PTHREAD_ERROR_HANDLE_0 (ret,
- out);
+ CHANGELOG_PTHREAD_ERROR_HANDLE_2 (ret,
+ out,
+ priv->dm.drain_black_mutex);
gf_msg_debug (this->name, 0,
"Signalled "
"draining of black");
@@ -1821,8 +1822,9 @@ changelog_dec_fop_cnt (xlator_t *this, changelog_priv_t *priv,
priv->dm.drain_wait_white == _gf_true) {
ret = pthread_cond_signal (
&priv->dm.drain_white_cond);
- CHANGELOG_PTHREAD_ERROR_HANDLE_0 (ret,
- out);
+ CHANGELOG_PTHREAD_ERROR_HANDLE_2 (ret,
+ out,
+ priv->dm.drain_white_mutex);
gf_msg_debug (this->name, 0,
"Signalled "
"draining of white");
diff --git a/xlators/features/changelog/src/changelog-helpers.h b/xlators/features/changelog/src/changelog-helpers.h
index 39a792891dd..1551337c16f 100644
--- a/xlators/features/changelog/src/changelog-helpers.h
+++ b/xlators/features/changelog/src/changelog-helpers.h
@@ -675,6 +675,19 @@ resolve_pargfid_to_path (xlator_t *this, const uuid_t gfid, char **path,
goto label; \
} \
} while (0)
+
+/* Log pthread error, unlock mutex and goto label */
+#define CHANGELOG_PTHREAD_ERROR_HANDLE_2(ret, label, mutex) do { \
+ if (ret) { \
+ gf_smsg (this->name, GF_LOG_ERROR, \
+ 0, CHANGELOG_MSG_PTHREAD_ERROR, \
+ "pthread error", "error=%d", ret, NULL); \
+ ret = -1; \
+ pthread_mutex_unlock (&mutex); \
+ goto label; \
+ } \
+ } while (0)
+
/* End: Geo-Rep snapshot dependency changes */
#endif /* _CHANGELOG_HELPERS_H */