summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gorrod <alexg@wiredtiger.com>2014-06-19 15:03:21 +1000
committerAlex Gorrod <alexg@wiredtiger.com>2014-06-19 15:03:21 +1000
commitf8ac98d387c0b73a1d419dfc6df94d0bd8b0cd5f (patch)
treeb4352effc1f3a310c68510262a4be47ef5d1ac94
parent372c5fa482ae9b793fe7a0e9010f67c402bde64f (diff)
parent4ccc71b548b392d99883042a052ff9d27d6d34da (diff)
downloadmongo-f8ac98d387c0b73a1d419dfc6df94d0bd8b0cd5f.tar.gz
Merge pull request #1077 from wiredtiger/lsm_lock_flag
LSM tree lock flag
-rw-r--r--src/lsm/lsm_cursor.c4
-rw-r--r--src/lsm/lsm_tree.c16
2 files changed, 10 insertions, 10 deletions
diff --git a/src/lsm/lsm_cursor.c b/src/lsm/lsm_cursor.c
index 32fb6153e56..6270d1e966c 100644
--- a/src/lsm/lsm_cursor.c
+++ b/src/lsm/lsm_cursor.c
@@ -430,7 +430,6 @@ __clsm_open_cursors(
WT_ERR(__wt_lsm_tree_lock(session, lsm_tree, 0));
locked = 1;
}
- F_SET(session, WT_SESSION_NO_CACHE_CHECK);
/* Merge cursors have already figured out how many chunks they need. */
retry: if (F_ISSET(clsm, WT_CLSM_MERGE)) {
@@ -619,7 +618,8 @@ retry: if (F_ISSET(clsm, WT_CLSM_MERGE)) {
}
clsm->dsk_gen = lsm_tree->dsk_gen;
-err: F_CLR(session, WT_SESSION_NO_CACHE_CHECK);
+
+err:
#ifdef HAVE_DIAGNOSTIC
/* Check that all cursors are open as expected. */
if (ret == 0 && F_ISSET(clsm, WT_CLSM_OPEN_READ)) {
diff --git a/src/lsm/lsm_tree.c b/src/lsm/lsm_tree.c
index 954e8d8dce9..14e179fbaeb 100644
--- a/src/lsm/lsm_tree.c
+++ b/src/lsm/lsm_tree.c
@@ -981,16 +981,17 @@ int
__wt_lsm_tree_lock(
WT_SESSION_IMPL *session, WT_LSM_TREE *lsm_tree, int exclusive)
{
+ if (exclusive)
+ WT_RET(__wt_writelock(session, lsm_tree->rwlock));
+ else
+ WT_RET(__wt_readlock(session, lsm_tree->rwlock));
+
/*
* Diagnostic: avoid deadlocks with the schema lock: if we need it for
* an operation, we should already have it.
*/
- F_SET(session, WT_SESSION_NO_SCHEMA_LOCK);
-
- if (exclusive)
- return (__wt_writelock(session, lsm_tree->rwlock));
- else
- return (__wt_readlock(session, lsm_tree->rwlock));
+ F_SET(session, WT_SESSION_NO_CACHE_CHECK | WT_SESSION_NO_SCHEMA_LOCK);
+ return (0);
}
/*
@@ -1001,8 +1002,7 @@ int
__wt_lsm_tree_unlock(
WT_SESSION_IMPL *session, WT_LSM_TREE *lsm_tree)
{
- F_CLR(session, WT_SESSION_NO_SCHEMA_LOCK);
-
+ F_CLR(session, WT_SESSION_NO_CACHE_CHECK | WT_SESSION_NO_SCHEMA_LOCK);
return (__wt_rwunlock(session, lsm_tree->rwlock));
}