]> git.sur5r.net Git - openldap/commitdiff
ITS#8021 env_sync is invalid in RDONLY env
authorHoward Chu <hyc@openldap.org>
Fri, 9 Jan 2015 11:25:07 +0000 (11:25 +0000)
committerHoward Chu <hyc@openldap.org>
Fri, 9 Jan 2015 11:25:07 +0000 (11:25 +0000)
libraries/liblmdb/lmdb.h
libraries/liblmdb/mdb.c

index 408b6ed0ead0c10a1713a6f8df49252f54d22129..35f5f420e385ff1dbcbb290d5ab095f019bfcd04 100644 (file)
@@ -698,7 +698,8 @@ int  mdb_env_info(MDB_env *env, MDB_envinfo *stat);
         * Data is always written to disk when #mdb_txn_commit() is called,
         * but the operating system may keep it buffered. LMDB always flushes
         * the OS buffers upon commit as well, unless the environment was
-        * opened with #MDB_NOSYNC or in part #MDB_NOMETASYNC.
+        * opened with #MDB_NOSYNC or in part #MDB_NOMETASYNC. This call is
+        * not valid if the environment was opened with #MDB_RDONLY.
         * @param[in] env An environment handle returned by #mdb_env_create()
         * @param[in] force If non-zero, force a synchronous flush.  Otherwise
         *  if the environment has the #MDB_NOSYNC flag set the flushes
@@ -706,6 +707,7 @@ int  mdb_env_info(MDB_env *env, MDB_envinfo *stat);
         * @return A non-zero error value on failure and 0 on success. Some possible
         * errors are:
         * <ul>
+        *      <li>EACCES - the environment is read-only.
         *      <li>EINVAL - an invalid parameter was specified.
         *      <li>EIO - an error occurred during synchronization.
         * </ul>
index 264c15fc9fe8fdcbdf738bb754178f7cc47e7a32..a57576850873bbef2589870df115deee06a32f85 100644 (file)
@@ -2305,6 +2305,8 @@ int
 mdb_env_sync(MDB_env *env, int force)
 {
        int rc = 0;
+       if (env->me_flags & MDB_RDONLY)
+               return EACCES;
        if (force || !F_ISSET(env->me_flags, MDB_NOSYNC)) {
                if (env->me_flags & MDB_WRITEMAP) {
                        int flags = ((env->me_flags & MDB_MAPASYNC) && !force)