mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-18 11:05:48 +08:00
Simpler mdb_env_write_meta()
This commit is contained in:
parent
bde5c231bc
commit
de5b689308
@ -3694,15 +3694,12 @@ mdb_env_write_meta(MDB_txn *txn)
|
||||
if (!(flags & (MDB_NOMETASYNC|MDB_NOSYNC))) {
|
||||
unsigned meta_size = env->me_psize;
|
||||
rc = (env->me_flags & MDB_MAPASYNC) ? MS_ASYNC : MS_SYNC;
|
||||
ptr = env->me_map;
|
||||
if (toggle) {
|
||||
ptr = (char *)mp - PAGEHDRSZ;
|
||||
#ifndef _WIN32 /* POSIX msync() requires ptr = start of OS page */
|
||||
if (meta_size < env->me_os_psize)
|
||||
meta_size += meta_size;
|
||||
else
|
||||
r2 = (ptr - env->me_map) & (env->me_os_psize - 1);
|
||||
ptr -= r2;
|
||||
meta_size += r2;
|
||||
#endif
|
||||
ptr += meta_size;
|
||||
}
|
||||
if (MDB_MSYNC(ptr, meta_size, rc)) {
|
||||
rc = ErrCode();
|
||||
goto fail;
|
||||
@ -3710,8 +3707,8 @@ mdb_env_write_meta(MDB_txn *txn)
|
||||
}
|
||||
goto done;
|
||||
}
|
||||
metab.mm_txnid = env->me_metas[toggle]->mm_txnid;
|
||||
metab.mm_last_pg = env->me_metas[toggle]->mm_last_pg;
|
||||
metab.mm_txnid = mp->mm_txnid;
|
||||
metab.mm_last_pg = mp->mm_last_pg;
|
||||
|
||||
meta.mm_mapsize = mapsize;
|
||||
meta.mm_dbs[FREE_DBI] = txn->mt_dbs[FREE_DBI];
|
||||
@ -3722,9 +3719,7 @@ mdb_env_write_meta(MDB_txn *txn)
|
||||
off = offsetof(MDB_meta, mm_mapsize);
|
||||
ptr = (char *)&meta + off;
|
||||
len = sizeof(MDB_meta) - off;
|
||||
if (toggle)
|
||||
off += env->me_psize;
|
||||
off += PAGEHDRSZ;
|
||||
off += (char *)mp - env->me_map;
|
||||
|
||||
/* Write to the SYNC fd */
|
||||
mfd = (flags & (MDB_NOSYNC|MDB_NOMETASYNC)) ? env->me_fd : env->me_mfd;
|
||||
|
Loading…
Reference in New Issue
Block a user