1 *** dbinc/mp.h 2007-09-28 01:28:25.000000000 +1000
2 --- dbinc/mp.h 2008-02-14 01:22:09.000000000 +1100
7 #define MP_TRUNC_RECOVER 0x01
9 + /* Private flags to DB_MPOOLFILE->close. */
10 + #define DB_MPOOL_NOLOCK 0x002 /* Already have mpf locked. */
12 #if defined(__cplusplus)
15 *** mp/mp_fopen.c 2007-05-18 03:18:01.000000000 +1000
16 --- mp/mp_fopen.c 2008-02-12 16:09:42.000000000 +1100
19 * when we try to flush them.
22 ! MUTEX_LOCK(dbenv, mfp->mutex);
23 if (F_ISSET(dbmfp, MP_MULTIVERSION))
25 if (--mfp->mpf_cnt == 0 || LF_ISSET(DB_MPOOL_DISCARD)) {
27 * when we try to flush them.
30 ! if (!LF_ISSET(DB_MPOOL_NOLOCK))
31 ! MUTEX_LOCK(dbenv, mfp->mutex);
32 if (F_ISSET(dbmfp, MP_MULTIVERSION))
34 if (--mfp->mpf_cnt == 0 || LF_ISSET(DB_MPOOL_DISCARD)) {
39 if (mfp->block_cnt == 0) {
41 __memp_mf_discard(dbmp, mfp)) != 0 && ret == 0)
47 MUTEX_UNLOCK(dbenv, mfp->mutex);
49 done: /* Discard the DB_MPOOLFILE structure. */
53 if (mfp->block_cnt == 0) {
55 + * We should never discard this mp file if our caller
56 + * is holding the lock on it. See comment in
59 + DB_ASSERT(dbenv, !LF_ISSET(DB_MPOOL_NOLOCK));
61 __memp_mf_discard(dbmp, mfp)) != 0 && ret == 0)
66 ! if (!deleted && !LF_ISSET(DB_MPOOL_NOLOCK))
67 MUTEX_UNLOCK(dbenv, mfp->mutex);
69 done: /* Discard the DB_MPOOLFILE structure. */
70 *** mp/mp_sync.c 2007-06-02 04:32:44.000000000 +1000
71 --- mp/mp_sync.c 2008-02-12 16:09:42.000000000 +1100
74 * This is important since we are called with the hash bucket
75 * locked. The mfp will get freed via the cleanup pass.
77 ! if (dbmfp != NULL && (t_ret = __memp_fclose(dbmfp, 0)) != 0 && ret == 0)
82 * This is important since we are called with the hash bucket
83 * locked. The mfp will get freed via the cleanup pass.
85 ! if (dbmfp != NULL &&
86 ! (t_ret = __memp_fclose(dbmfp, DB_MPOOL_NOLOCK)) != 0 && ret == 0)