summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Cahill <michael.cahill@wiredtiger.com>2012-09-24 16:20:35 +1000
committerMichael Cahill <michael.cahill@wiredtiger.com>2012-09-24 16:20:35 +1000
commit8c054c55219dddc43338442e88859664c47493dd (patch)
tree527ac8be49ff69985904606ec7a398845a87ee23
parent665614dcab3095f3f130d77ecee6370949c78f25 (diff)
downloadmongo-8c054c55219dddc43338442e88859664c47493dd.tar.gz
Another fix to make sure handles are unlocked exactly once if drop fails.
-rw-r--r--src/conn/conn_btree.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/conn/conn_btree.c b/src/conn/conn_btree.c
index 83e0393cc5c..090c9854d8b 100644
--- a/src/conn/conn_btree.c
+++ b/src/conn/conn_btree.c
@@ -436,6 +436,8 @@ __wt_conn_btree_close_all(WT_SESSION_IMPL *session, const char *name)
if (strcmp(btree->name, name) != 0)
continue;
+ WT_SET_BTREE_IN_SESSION(session, btree);
+
/*
* The caller may have this tree locked to prevent
* concurrent schema operations.
@@ -445,7 +447,6 @@ __wt_conn_btree_close_all(WT_SESSION_IMPL *session, const char *name)
else {
WT_ERR(__wt_try_writelock(session, btree->rwlock));
F_SET(btree, WT_BTREE_EXCLUSIVE);
- session->btree = btree;
if (WT_META_TRACKING(session))
WT_ERR(__wt_meta_track_handle_lock(session, 0));
}
@@ -472,12 +473,13 @@ __wt_conn_btree_close_all(WT_SESSION_IMPL *session, const char *name)
if (!WT_META_TRACKING(session))
WT_TRET(__wt_session_release_btree(session));
- session->btree = NULL;
+ WT_CLEAR_BTREE_IN_SESSION(session);
WT_ERR(ret);
}
-err: return (ret);
+err: WT_CLEAR_BTREE_IN_SESSION(session);
+ return (ret);
}
/*