diff options
Diffstat (limited to 'src/mp/mp_sync.c')
-rw-r--r-- | src/mp/mp_sync.c | 21 |
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); } |