Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
David Barchiesi
OpenLDAP
Commits
8de0788b
Commit
8de0788b
authored
Sep 27, 2016
by
Hallvard Furuseth
Browse files
Only set me_mfd if needed. Drop unused read access.
parent
e911ad64
Changes
1
Hide whitespace changes
Inline
Side-by-side
libraries/liblmdb/mdb.c
View file @
8de0788b
...
...
@@ -1239,7 +1239,7 @@ typedef struct MDB_pgstate {
struct
MDB_env
{
HANDLE
me_fd
;
/**< The main data file */
HANDLE
me_lfd
;
/**< The lock file */
HANDLE me_mfd;
/**<
just f
or writing the meta pages */
HANDLE
me_mfd
;
/**<
F
or writing
and syncing
the meta pages */
/** Failed to update the meta page. Probably an I/O error. */
#define MDB_FATAL_ERROR 0x80000000U
/** Some fields are initialized. */
...
...
@@ -3827,7 +3827,10 @@ mdb_env_write_meta(MDB_txn *txn)
len
=
sizeof
(
MDB_meta
)
-
off
;
off
+=
(
char
*
)
mp
-
env
->
me_map
;
/* Write to the SYNC fd */
/* Write to the SYNC fd unless MDB_NOSYNC/MDB_NOMETASYNC.
* (me_mfd goes to the same file as me_fd, but writing to it
* also syncs to disk. Avoids a separate fdatasync() call.)
*/
mfd
=
(
flags
&
(
MDB_NOSYNC
|
MDB_NOMETASYNC
))
?
env
->
me_fd
:
env
->
me_mfd
;
#ifdef _WIN32
{
...
...
@@ -4156,7 +4159,7 @@ enum mdb_fopen_type {
/* A comment in mdb_fopen() explains some O_* flag choices. */
MDB_O_RDONLY
=
O_RDONLY
,
/**< for RDONLY me_fd */
MDB_O_RDWR
=
O_RDWR
|
O_CREAT
,
/**< for me_fd */
MDB_O_META = O_
RDWR
|MDB_DSYNC |MDB_CLOEXEC, /**< for me_mfd */
MDB_O_META
=
O_
WRONLY
|
MDB_DSYNC
|
MDB_CLOEXEC
,
/**< for me_mfd */
MDB_O_COPY
=
O_WRONLY
|
O_CREAT
|
O_EXCL
|
MDB_CLOEXEC
,
/**< for #mdb_env_copy() */
/** Bitmask for open() flags in enum #mdb_fopen_type. The other bits
* distinguish otherwise-equal MDB_O_* constants from each other.
...
...
@@ -4217,6 +4220,7 @@ mdb_fopen(const MDB_env *env, MDB_name *fname,
disp
=
OPEN_EXISTING
;
break
;
case
MDB_O_META
:
/* for writing metapages */
acc
=
GENERIC_WRITE
;
disp
=
OPEN_EXISTING
;
attrs
=
FILE_ATTRIBUTE_NORMAL
|
FILE_FLAG_WRITE_THROUGH
;
break
;
...
...
@@ -4955,9 +4959,7 @@ mdb_env_open(MDB_env *env, const char *path, unsigned int flags, mdb_mode_t mode
}
if
((
rc
=
mdb_env_open2
(
env
))
==
MDB_SUCCESS
)
{
if (flags & (MDB_RDONLY|MDB_WRITEMAP)) {
env->me_mfd = env->me_fd;
} else {
if
(
!
(
flags
&
(
MDB_RDONLY
|
MDB_WRITEMAP
)))
{
/* Synchronous fd for meta writes. Needed even with
* MDB_NOSYNC/MDB_NOMETASYNC, in case these get reset.
*/
...
...
@@ -5040,7 +5042,7 @@ mdb_env_close0(MDB_env *env, int excl)
if
(
env
->
me_map
)
{
munmap
(
env
->
me_map
,
env
->
me_mapsize
);
}
if (env->me_mfd !=
env->me_fd && env->me_mfd !=
INVALID_HANDLE_VALUE)
if
(
env
->
me_mfd
!=
INVALID_HANDLE_VALUE
)
(
void
)
close
(
env
->
me_mfd
);
if
(
env
->
me_fd
!=
INVALID_HANDLE_VALUE
)
(
void
)
close
(
env
->
me_fd
);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment