summaryrefslogtreecommitdiff
path: root/src/mp/mp_mvcc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mp/mp_mvcc.c')
-rw-r--r--src/mp/mp_mvcc.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/mp/mp_mvcc.c b/src/mp/mp_mvcc.c
index 47531528..b51ae135 100644
--- a/src/mp/mp_mvcc.c
+++ b/src/mp/mp_mvcc.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 2006, 2012 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2015 Oracle and/or its affiliates. All rights reserved.
*
* $Id$
*/
@@ -151,6 +151,11 @@ __memp_bh_freeze(dbmp, infop, hp, bhp, need_frozenp)
real_name = NULL;
fhp = NULL;
+ if (FLD_ISSET(env->dbenv->verbose, DB_VERB_MVCC))
+ __db_msg(env, "freeze %s %d @%lu/%lu", __memp_fns(dbmp, mfp),
+ bhp->pgno, (u_long)VISIBLE_LSN(env, bhp)->file,
+ (u_long)VISIBLE_LSN(env, bhp)->offset);
+
MVCC_MPROTECT(bhp->buf, pagesize, PROT_READ | PROT_WRITE);
MPOOL_REGION_LOCK(env, infop);
@@ -161,7 +166,7 @@ __memp_bh_freeze(dbmp, infop, hp, bhp, need_frozenp)
} else {
*need_frozenp = 1;
- /* There might be a small amount of unallocated space. */
+ /* There might be enough space for a single-item block. */
if (__env_alloc(infop,
sizeof(BH_FROZEN_ALLOC) + sizeof(BH_FROZEN_PAGE),
&frozen_alloc) == 0) {
@@ -405,6 +410,12 @@ __memp_bh_thaw(dbmp, infop, hp, frozen_bhp, alloc_bhp)
ret = 0;
real_name = NULL;
+ if (FLD_ISSET(env->dbenv->verbose, DB_VERB_MVCC))
+ __db_msg(env, "thaw %s %d @%lu/%lu", __memp_fns(dbmp, mfp),
+ frozen_bhp->pgno,
+ (u_long)VISIBLE_LSN(env, frozen_bhp)->file,
+ (u_long)VISIBLE_LSN(env, frozen_bhp)->offset);
+
MUTEX_REQUIRED(env, hp->mtx_hash);
DB_ASSERT(env, F_ISSET(frozen_bhp, BH_EXCLUSIVE) || alloc_bhp == NULL);
h_locked = 1;
@@ -414,7 +425,8 @@ __memp_bh_thaw(dbmp, infop, hp, frozen_bhp, alloc_bhp)
DB_ASSERT(env, alloc_bhp != NULL ||
SH_CHAIN_SINGLETON(frozen_bhp, vc) ||
(SH_CHAIN_HASNEXT(frozen_bhp, vc) &&
- BH_OBSOLETE(frozen_bhp, hp->old_reader, vlsn)));
+ BH_OBSOLETE(frozen_bhp, hp->old_reader, vlsn)) ||
+ F_ISSET(frozen_bhp, BH_UNREACHABLE));
DB_ASSERT(env, alloc_bhp == NULL || !F_ISSET(alloc_bhp, BH_FROZEN));
spgno = ((BH_FROZEN_PAGE *)frozen_bhp)->spgno;
@@ -516,7 +528,7 @@ __memp_bh_thaw(dbmp, infop, hp, frozen_bhp, alloc_bhp)
else {
maxpgno -= (db_pgno_t)ntrunc;
if ((ret = __os_truncate(env, fhp,
- maxpgno + 1, pagesize)) != 0)
+ maxpgno + 1, pagesize, 0)) != 0)
goto err;
/* Fix up the linked list */