summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Cahill <michael.cahill@mongodb.com>2015-04-14 16:30:31 +1000
committerMichael Cahill <michael.cahill@mongodb.com>2015-04-25 12:50:52 +1000
commitba56581ea8ec80ccd060254ab74fb9af2b57199d (patch)
tree5ad72785321338b0b196a6834314ad45a0f94027
parent6bc0d1c5a4f684989d2f7637b4198541189fdb9c (diff)
downloadmongo-ba56581ea8ec80ccd060254ab74fb9af2b57199d.tar.gz
Merge bulk cursor close with regular file cursor close: we were missing a decrement that kept bulk-loaded files pinned.
-rw-r--r--src/cursor/cur_bulk.c31
-rw-r--r--src/cursor/cur_file.c8
2 files changed, 8 insertions, 31 deletions
diff --git a/src/cursor/cur_bulk.c b/src/cursor/cur_bulk.c
index b38821f99ff..df7048d4b82 100644
--- a/src/cursor/cur_bulk.c
+++ b/src/cursor/cur_bulk.c
@@ -220,36 +220,6 @@ err: API_END_RET(session, ret);
}
/*
- * __curbulk_close --
- * WT_CURSOR->close for the bulk cursor type.
- */
-static int
-__curbulk_close(WT_CURSOR *cursor)
-{
- WT_BTREE *btree;
- WT_CURSOR_BULK *cbulk;
- WT_DECL_RET;
- WT_SESSION_IMPL *session;
-
- cbulk = (WT_CURSOR_BULK *)cursor;
- btree = cbulk->cbt.btree;
-
- CURSOR_API_CALL(cursor, session, close, btree);
-
- WT_TRET(__wt_bulk_wrapup(session, cbulk));
- __wt_buf_free(session, &cbulk->last);
-
- WT_TRET(__wt_session_release_btree(session));
-
- /* The URI is owned by the btree handle. */
- cursor->internal_uri = NULL;
-
- WT_TRET(__wt_cursor_close(cursor));
-
-err: API_END_RET(session, ret);
-}
-
-/*
* __wt_curbulk_init --
* Initialize a bulk cursor.
*/
@@ -278,7 +248,6 @@ __wt_curbulk_init(WT_SESSION_IMPL *session,
break;
WT_ILLEGAL_VALUE(session);
}
- c->close = __curbulk_close;
cbulk->bitmap = bitmap;
if (bitmap)
diff --git a/src/cursor/cur_file.c b/src/cursor/cur_file.c
index 2f24d8ed59a..10ff18df0e0 100644
--- a/src/cursor/cur_file.c
+++ b/src/cursor/cur_file.c
@@ -356,11 +356,19 @@ static int
__curfile_close(WT_CURSOR *cursor)
{
WT_CURSOR_BTREE *cbt;
+ WT_CURSOR_BULK *cbulk;
WT_DECL_RET;
WT_SESSION_IMPL *session;
cbt = (WT_CURSOR_BTREE *)cursor;
CURSOR_API_CALL(cursor, session, close, cbt->btree);
+ if (F_ISSET(cursor, WT_CURSTD_BULK)) {
+ /* Free the bulk-specific resources. */
+ cbulk = (WT_CURSOR_BULK *)cbt;
+ WT_TRET(__wt_bulk_wrapup(session, cbulk));
+ __wt_buf_free(session, &cbulk->last);
+ }
+
WT_TRET(__wt_btcur_close(cbt));
if (cbt->btree != NULL) {
/* Increment the data-source's in-use counter. */