summaryrefslogtreecommitdiff
path: root/src/mp/mp_sync.c
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2015-02-17 17:25:57 +0000
committer <>2015-03-17 16:26:24 +0000
commit780b92ada9afcf1d58085a83a0b9e6bc982203d1 (patch)
tree598f8b9fa431b228d29897e798de4ac0c1d3d970 /src/mp/mp_sync.c
parent7a2660ba9cc2dc03a69ddfcfd95369395cc87444 (diff)
downloadberkeleydb-master.tar.gz
Imported from /home/lorry/working-area/delta_berkeleydb/db-6.1.23.tar.gz.HEADdb-6.1.23master
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);
}