diff options
Diffstat (limited to 'src/mp/mp_mvcc.c')
-rw-r--r-- | src/mp/mp_mvcc.c | 20 |
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 */ |