From: Hallvard Furuseth Date: Mon, 8 Dec 2014 08:56:36 +0000 (+0100) Subject: Try to avoid an invalid datafile after failed init X-Git-Tag: LMDB_0.9.17~89 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=f3d3f60e3dd051f2a4fcb0fe4deb000e988f3eab;p=openldap Try to avoid an invalid datafile after failed init --- diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c index d5387bc3bc..da09f8dbfe 100644 --- a/libraries/liblmdb/mdb.c +++ b/libraries/liblmdb/mdb.c @@ -4008,6 +4008,20 @@ mdb_env_open2(MDB_env *env) } meta.mm_mapsize = env->me_mapsize; + if (newenv && !(flags & MDB_FIXEDMAP)) { + /* mdb_env_map() may grow the datafile. Write the metapages + * first, so the file will be valid if initialization fails. + * Except with FIXEDMAP, since we do not yet know mm_address. + * We could fill in mm_address later, but then a different + * program might end up doing that - one with a memory layout + * and map address which does not suit the main program. + */ + rc = mdb_env_init_meta(env, &meta); + if (rc) + return rc; + newenv = 0; + } + rc = mdb_env_map(env, (flags & MDB_FIXEDMAP) ? meta.mm_address : NULL); if (rc) return rc;