mirror of
https://github.com/isar/libmdbx.git
synced 2025-12-15 16:42:22 +08:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ecbc0b9c12 | ||
|
|
a783325a6d | ||
|
|
f55c30f286 | ||
|
|
4874852b79 | ||
|
|
6760ca87ae |
2
Makefile
2
Makefile
@@ -1,5 +1,5 @@
|
||||
# GNU Makefile for libmdbx (reliable lightning memory-mapped DB library for Linux).
|
||||
# https://github.com/ReOpen/libmdbx
|
||||
# https://github.com/leo-yuriev/libmdbx
|
||||
|
||||
########################################################################
|
||||
# Configuration. The compiler options must enable threaded compilation.
|
||||
|
||||
@@ -3,9 +3,9 @@ libmdbx
|
||||
Extended LMDB, aka "Расширенная LMDB".
|
||||
|
||||
*The Future will Positive. Всё будет хорошо.*
|
||||
[](https://travis-ci.org/ReOpen/libmdbx)
|
||||
[](https://travis-ci.org/leo-yuriev/libmdbx)
|
||||
|
||||
English version by Google [is here](https://translate.googleusercontent.com/translate_c?act=url&ie=UTF8&sl=ru&tl=en&u=https://github.com/ReOpen/libmdbx/tree/master).
|
||||
English version by Google [is here](https://translate.googleusercontent.com/translate_c?act=url&ie=UTF8&sl=ru&tl=en&u=https://github.com/leo-yuriev/libmdbx/tree/stable%2F0.0).
|
||||
|
||||
|
||||
## Кратко
|
||||
@@ -28,7 +28,7 @@ _libmdbx_ является потомком "Lightning Memory-Mapped Database",
|
||||
известной под аббревиатурой
|
||||
[LMDB](https://en.wikipedia.org/wiki/Lightning_Memory-Mapped_Database).
|
||||
Изначально доработка производилась в составе проекта
|
||||
[ReOpenLDAP](https://github.com/ReOpen/ReOpenLDAP). Примерно за год
|
||||
[ReOpenLDAP](https://github.com/leo-yuriev/ReOpenLDAP). Примерно за год
|
||||
работы внесенные изменения приобрели самостоятельную ценность. Осенью
|
||||
2015 доработанный движок был выделен в отдельный проект, который был
|
||||
[представлен на конференции Highload++
|
||||
|
||||
2
lmdb.h
2
lmdb.h
@@ -212,7 +212,7 @@ typedef int mdb_filehandle_t;
|
||||
#define MDB_VERSION_DATE "2017-02-17"
|
||||
|
||||
/** A stringifier for the version info */
|
||||
#define MDB_VERSTR(a,b,c,d) "MDBX " #a "." #b "." #c ": (" d ", https://github.com/ReOpen/libmdbx)"
|
||||
#define MDB_VERSTR(a,b,c,d) "MDBX " #a "." #b "." #c ": (" d ", https://github.com/leo-yuriev/libmdbx)"
|
||||
|
||||
/** A helper for the stringifier macro */
|
||||
#define MDB_VERFOO(a,b,c,d) MDB_VERSTR(a,b,c,d)
|
||||
|
||||
21
mdb.c
21
mdb.c
@@ -1048,7 +1048,7 @@ typedef struct MDB_pgstate {
|
||||
} MDB_pgstate;
|
||||
|
||||
/** Context for deferred cleanup of reader's threads.
|
||||
* to avoid https://github.com/ReOpen/ReOpenLDAP/issues/48 */
|
||||
* to avoid https://github.com/leo-yuriev/ReOpenLDAP/issues/48 */
|
||||
typedef struct MDBX_rthc {
|
||||
struct MDBX_rthc *rc_next;
|
||||
pthread_t rc_thread;
|
||||
@@ -4341,7 +4341,7 @@ mdb_env_create(MDB_env **env)
|
||||
}
|
||||
|
||||
static int __cold
|
||||
mdb_env_map(MDB_env *env, void *addr, size_t usedsize)
|
||||
mdb_env_map(MDB_env *env, void *addr)
|
||||
{
|
||||
unsigned flags = env->me_flags;
|
||||
|
||||
@@ -4381,12 +4381,6 @@ mdb_env_map(MDB_env *env, void *addr, size_t usedsize)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef MADV_REMOVE
|
||||
if (flags & MDB_WRITEMAP) {
|
||||
(void) madvise(env->me_map + usedsize, env->me_mapsize - usedsize, MADV_REMOVE);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Turn on/off readahead. It's harmful when the DB is larger than RAM. */
|
||||
if (madvise(env->me_map, env->me_mapsize, (flags & MDB_NORDAHEAD) ? MADV_RANDOM : MADV_WILLNEED))
|
||||
return errno;
|
||||
@@ -4439,7 +4433,7 @@ mdb_env_set_mapsize(MDB_env *env, size_t size)
|
||||
#endif
|
||||
env->me_mapsize = size;
|
||||
old = (env->me_flags & MDB_FIXEDMAP) ? env->me_map : NULL;
|
||||
rc = mdb_env_map(env, old, usedsize);
|
||||
rc = mdb_env_map(env, old);
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
@@ -4557,8 +4551,7 @@ mdb_env_open2(MDB_env *env, MDB_meta *meta)
|
||||
newenv = 0;
|
||||
}
|
||||
|
||||
const size_t usedsize = (meta->mm_last_pg + 1) * env->me_psize;
|
||||
rc = mdb_env_map(env, (flags & MDB_FIXEDMAP) ? meta->mm_address : NULL, usedsize);
|
||||
rc = mdb_env_map(env, (flags & MDB_FIXEDMAP) ? meta->mm_address : NULL);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
@@ -4631,7 +4624,7 @@ void mdbx_rthc_dtor(void)
|
||||
* TSD-деструкторах и поэтому может выгрузить lib.so до того как
|
||||
* отработали все деструкторы.
|
||||
* - Исходное проявление проблемы было зафиксировано
|
||||
* в https://github.com/ReOpen/ReOpenLDAP/issues/48
|
||||
* в https://github.com/leo-yuriev/ReOpenLDAP/issues/48
|
||||
*
|
||||
* Предыдущее решение посредством выделяемого динамически MDB_rthc
|
||||
* было не удачным, так как порождало либо утечку памяти,
|
||||
@@ -8812,8 +8805,10 @@ mdb_cursor_del0(MDB_cursor *mc)
|
||||
if (m3->mc_xcursor->mx_cursor.mc_flags & C_INITIALIZED) {
|
||||
if (!(node->mn_flags & F_SUBDATA))
|
||||
m3->mc_xcursor->mx_cursor.mc_pg[0] = NODEDATA(node);
|
||||
} else
|
||||
} else {
|
||||
mdb_xcursor_init1(m3, node);
|
||||
m3->mc_xcursor->mx_cursor.mc_flags |= C_DEL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
3
mdbx.c
3
mdbx.c
@@ -864,13 +864,14 @@ int mdbx_set_attr(MDB_txn *txn, MDB_dbi dbi,
|
||||
return rc;
|
||||
}
|
||||
|
||||
old_attr = 0;
|
||||
rc = mdbx_attr_peek(&old_data, &old_attr);
|
||||
if (unlikely(rc != MDB_SUCCESS))
|
||||
return rc;
|
||||
|
||||
if (old_attr == attr && (!data ||
|
||||
(data->mv_size == old_data.mv_size
|
||||
&& memcpy(data->mv_data, old_data.mv_data, old_data.mv_size) == 0)))
|
||||
&& memcmp(data->mv_data, old_data.mv_data, old_data.mv_size) == 0)))
|
||||
return MDB_SUCCESS;
|
||||
|
||||
mc.mc_next = txn->mt_cursors[dbi];
|
||||
|
||||
Reference in New Issue
Block a user