@agorrod, clang says the initial assignment to locked in __wt_lsm_tree_truncate:
WT_UNUSED(cfg);
chunk = NULL;
locked = 0;
/* Get the LSM tree. */
WT_RET(__wt_lsm_tree_get(session, name, 1, &lsm_tree));
is dead, and technically, it's correct because all of the paths that lead to a read of that variable are after a subsequent assignment to it.
I'd ignore that complaint, myself, but while I was staring at the code, I noticed we're not decrementing the tree's refcnt on error (the error path doesn't call __wt_lsm_tree_release). Is that correct? If not, maybe this change would be appropriate?
diff --git a/src/lsm/lsm_tree.c b/src/lsm/lsm_tree.c
index 6d12ff6..3f3a519 100644
--- a/src/lsm/lsm_tree.c
+++ b/src/lsm/lsm_tree.c
@@ -931,7 +931,6 @@ __wt_lsm_tree_truncate(
WT_UNUSED(cfg);
chunk = NULL;
- locked = 0;
/* Get the LSM tree. */
WT_RET(__wt_lsm_tree_get(session, name, 1, &lsm_tree));
@@ -941,7 +940,6 @@ __wt_lsm_tree_truncate(
/* Prevent any new opens. */
WT_RET(__wt_lsm_tree_lock(session, lsm_tree, 1));
- locked = 1;
/* Create the new chunk. */
WT_ERR(__wt_calloc_def(session, 1, &chunk));
@@ -955,12 +953,10 @@ __wt_lsm_tree_truncate(
WT_ERR(__wt_lsm_meta_write(session, lsm_tree));
WT_ERR(__lsm_tree_start_worker(session, lsm_tree));
- locked = 0;
- WT_ERR(__wt_lsm_tree_unlock(session, lsm_tree));
+
+err: WT_TRET(__wt_lsm_tree_unlock(session, lsm_tree));
__wt_lsm_tree_release(session, lsm_tree);
-err: if (locked)
- WT_TRET(__wt_lsm_tree_unlock(session, lsm_tree));
if (ret != 0) {
if (chunk != NULL) {
(void)__wt_schema_drop(session, chunk->uri, NULL);
would be a reasonable change.