summaryrefslogtreecommitdiff
path: root/src/mp/mp_sync.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mp/mp_sync.c')
-rw-r--r--src/mp/mp_sync.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/mp/mp_sync.c b/src/mp/mp_sync.c
index fa06b1d4..82d5c8de 100644
--- a/src/mp/mp_sync.c
+++ b/src/mp/mp_sync.c
@@ -1,7 +1,7 @@
/*-
* See the file LICENSE for redistribution information.
*
- * Copyright (c) 1996, 2012 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015 Oracle and/or its affiliates. All rights reserved.
*
* $Id$
*/
@@ -95,9 +95,11 @@ __memp_discard_all_mpfs (env, mp)
while ((mfp = SH_TAILQ_FIRST(
&hp->hash_bucket, __mpoolfile)) != NULL) {
MUTEX_LOCK(env, mfp->mutex);
- if ((t_ret = __memp_mf_discard(dbmp, mfp, 1)) != 0 &&
- ret == 0)
- ret = t_ret;
+ if ((t_ret = __memp_mf_discard(dbmp, mfp, 1)) != 0) {
+ if (ret == 0)
+ ret = t_ret;
+ break;
+ }
}
MUTEX_UNLOCK(env, hp->mtx_hash);
}
@@ -837,6 +839,7 @@ __memp_mf_sync(dbmp, mfp, locked)
MPOOLFILE *mfp;
int locked;
{
+ APPNAME appname;
DB_FH *fhp;
DB_MPOOL_HASH *hp;
ENV *env;
@@ -846,6 +849,7 @@ __memp_mf_sync(dbmp, mfp, locked)
COMPQUIET(hp, NULL);
env = dbmp->env;
+ appname = DB_APP_DATA;
/*
* We need to be holding the hash lock: we're using the path name
@@ -859,13 +863,20 @@ __memp_mf_sync(dbmp, mfp, locked)
MUTEX_LOCK(env, hp->mtx_hash);
}
- if ((ret = __db_appname(env, DB_APP_DATA,
+mpsync: if ((ret = __db_appname(env, appname,
R_ADDR(dbmp->reginfo, mfp->path_off), NULL, &rpath)) == 0) {
if ((ret = __os_open(env, rpath, 0, 0, 0, &fhp)) == 0) {
ret = __os_fsync(env, fhp);
if ((t_ret =
__os_closehandle(env, fhp)) != 0 && ret == 0)
ret = t_ret;
+ } else {
+ /* We may be syncing the blob meta db. */
+ if (appname != DB_APP_BLOB) {
+ __os_free(env, rpath);
+ appname = DB_APP_BLOB;
+ goto mpsync;
+ }
}
__os_free(env, rpath);
}