mirror of
https://github.com/isar/libmdbx.git
synced 2025-01-04 18:34:12 +08:00
mdbx: rework mdbx_env_setup_locks()'s tasks.
Change-Id: I79953554a0b2cce8235ec5dbc83f183cb3fd56a0
This commit is contained in:
parent
a0f1d61a4a
commit
1596bceff2
23
src/mdbx.c
23
src/mdbx.c
@ -3263,8 +3263,7 @@ fail:
|
|||||||
* mapping it into memory.
|
* mapping it into memory.
|
||||||
* @param[in] env the environment handle
|
* @param[in] env the environment handle
|
||||||
* @param[out] meta address of where to store the meta information
|
* @param[out] meta address of where to store the meta information
|
||||||
* @return 0 on success, non-zero on failure.
|
* @return 0 on success, non-zero on failure. */
|
||||||
*/
|
|
||||||
static int __cold mdbx_env_read_header(MDB_env *env, MDB_meta *meta) {
|
static int __cold mdbx_env_read_header(MDB_env *env, MDB_meta *meta) {
|
||||||
MDB_metabuf pbuf;
|
MDB_metabuf pbuf;
|
||||||
MDB_page *p;
|
MDB_page *p;
|
||||||
@ -3799,14 +3798,17 @@ static int __cold mdbx_env_open2(MDB_env *env, MDB_meta *meta) {
|
|||||||
static int __cold mdbx_env_setup_locks(MDB_env *env, char *lpath, int mode,
|
static int __cold mdbx_env_setup_locks(MDB_env *env, char *lpath, int mode,
|
||||||
int *excl) {
|
int *excl) {
|
||||||
off_t size;
|
off_t size;
|
||||||
|
assert(env->me_fd != INVALID_HANDLE_VALUE);
|
||||||
|
assert(env->me_lfd == INVALID_HANDLE_VALUE);
|
||||||
|
|
||||||
int rc = mdbx_openfile(lpath, O_RDWR | O_CREAT, mode, &env->me_lfd);
|
int rc = mdbx_openfile(lpath, O_RDWR | O_CREAT, mode, &env->me_lfd);
|
||||||
if (rc != MDB_SUCCESS) {
|
if (rc != MDB_SUCCESS) {
|
||||||
if (rc == EROFS && (env->me_flags & MDB_RDONLY)) {
|
if (rc == EROFS && (env->me_flags & MDB_RDONLY)) {
|
||||||
env->me_lfd = INVALID_HANDLE_VALUE;
|
env->me_lfd = INVALID_HANDLE_VALUE;
|
||||||
rc = MDB_SUCCESS;
|
rc = MDB_SUCCESS;
|
||||||
|
} else {
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Try to get exclusive lock. If we succeed, then
|
/* Try to get exclusive lock. If we succeed, then
|
||||||
@ -3979,13 +3981,6 @@ int __cold mdbx_env_open_ex(MDB_env *env, const char *path, unsigned flags,
|
|||||||
}
|
}
|
||||||
env->me_dbxs[FREE_DBI].md_cmp = mdbx_cmp_int_ai; /* aligned MDB_INTEGERKEY */
|
env->me_dbxs[FREE_DBI].md_cmp = mdbx_cmp_int_ai; /* aligned MDB_INTEGERKEY */
|
||||||
|
|
||||||
/* For RDONLY, get lockfile after we know datafile exists */
|
|
||||||
if (!(flags & MDB_RDONLY)) {
|
|
||||||
rc = mdbx_env_setup_locks(env, lpath, mode, &excl);
|
|
||||||
if (rc)
|
|
||||||
goto bailout;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (F_ISSET(flags, MDB_RDONLY))
|
if (F_ISSET(flags, MDB_RDONLY))
|
||||||
oflags = O_RDONLY;
|
oflags = O_RDONLY;
|
||||||
else
|
else
|
||||||
@ -3995,11 +3990,9 @@ int __cold mdbx_env_open_ex(MDB_env *env, const char *path, unsigned flags,
|
|||||||
if (rc != MDB_SUCCESS)
|
if (rc != MDB_SUCCESS)
|
||||||
goto bailout;
|
goto bailout;
|
||||||
|
|
||||||
if (flags & MDB_RDONLY) {
|
rc = mdbx_env_setup_locks(env, lpath, mode, &excl);
|
||||||
rc = mdbx_env_setup_locks(env, lpath, mode, &excl);
|
if (rc)
|
||||||
if (rc)
|
goto bailout;
|
||||||
goto bailout;
|
|
||||||
}
|
|
||||||
|
|
||||||
MDB_meta meta;
|
MDB_meta meta;
|
||||||
rc = mdbx_env_open2(env, &meta);
|
rc = mdbx_env_open2(env, &meta);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user