- Prevent deadlock when process holding the db lock dies
0001-Patch-for-LMDB-to-use-robust-mutexes.patch - command line tools for debugging 0002-Add-extra-tools-and-CFEngine-modifications-for-LMDB.patch - Switch to cmake, fix dynamic lib build and versioning. OBS-URL: https://build.opensuse.org/package/show/systemsmanagement/lmdb?expand=0&rev=8
This commit is contained in:
parent
4dbd3fba8d
commit
fb89d7b078
93
0001-Patch-for-LMDB-to-use-robust-mutexes.patch
Normal file
93
0001-Patch-for-LMDB-to-use-robust-mutexes.patch
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
diff -wruN -x '*~' -x '*.o' -x '*.a' -x '*.so' -x '*.so.[0-9]' -x autom4te.cache -x .deps -x .libs ../orig-liblmdb/configure.ac ./configure.ac
|
||||||
|
--- ../orig-liblmdb/configure.ac 2014-07-28 17:44:41.873398363 +0200
|
||||||
|
+++ ./configure.ac 2014-07-28 17:47:06.143497590 +0200
|
||||||
|
@@ -9,5 +9,12 @@
|
||||||
|
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
||||||
|
LT_INIT
|
||||||
|
AC_CHECK_HEADERS([sys/file.h])
|
||||||
|
+AC_CHECK_LIB([pthread], [pthread_mutex_lock])
|
||||||
|
+AC_CHECK_LIB([pthreadGC2], [pthread_mutex_lock])
|
||||||
|
+AS_IF([test "$ac_cv_lib_pthread" = "no" && test "$ac_cv_lib_pthreadGC2" = "no"],
|
||||||
|
+[
|
||||||
|
+ AC_MSG_ERROR([Could not find pthreads library])
|
||||||
|
+])
|
||||||
|
+AC_CHECK_FUNCS([pthread_mutexattr_settype pthread_mutexattr_setrobust])
|
||||||
|
AC_CONFIG_FILES([Makefile])
|
||||||
|
AC_OUTPUT
|
||||||
|
diff -wruN -x '*~' -x '*.o' -x '*.a' -x '*.so' -x '*.so.[0-9]' -x autom4te.cache -x .deps -x .libs ../orig-liblmdb/mdb.c ./mdb.c
|
||||||
|
--- ../orig-liblmdb/mdb.c 2014-01-31 09:23:13.341427766 +0100
|
||||||
|
+++ ./mdb.c 2014-07-28 17:44:55.145959267 +0200
|
||||||
|
@@ -169,6 +169,7 @@
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define MDB_USE_HASH 1
|
||||||
|
#define MDB_PIDLOCK 0
|
||||||
|
+#define EOWNERDEAD 130
|
||||||
|
#define pthread_t DWORD
|
||||||
|
#define pthread_mutex_t HANDLE
|
||||||
|
#define pthread_key_t DWORD
|
||||||
|
@@ -179,7 +180,7 @@
|
||||||
|
#define pthread_getspecific(x) TlsGetValue(x)
|
||||||
|
#define pthread_setspecific(x,y) (TlsSetValue(x,y) ? 0 : ErrCode())
|
||||||
|
#define pthread_mutex_unlock(x) ReleaseMutex(x)
|
||||||
|
-#define pthread_mutex_lock(x) WaitForSingleObject(x, INFINITE)
|
||||||
|
+#define pthread_mutex_lock(x) (WaitForSingleObject(x, INFINITE) == WAIT_ABANDONED ? EOWNERDEAD : 0) // masks FAIL and TIMEOUT error, but acceptable
|
||||||
|
#define LOCK_MUTEX_R(env) pthread_mutex_lock((env)->me_rmutex)
|
||||||
|
#define UNLOCK_MUTEX_R(env) pthread_mutex_unlock((env)->me_rmutex)
|
||||||
|
#define LOCK_MUTEX_W(env) pthread_mutex_lock((env)->me_wmutex)
|
||||||
|
@@ -2275,7 +2276,20 @@
|
||||||
|
env->me_flags |= MDB_LIVE_READER;
|
||||||
|
}
|
||||||
|
|
||||||
|
- LOCK_MUTEX_R(env);
|
||||||
|
+ rc = LOCK_MUTEX_R(env);
|
||||||
|
+ switch (rc)
|
||||||
|
+ {
|
||||||
|
+ case 0:
|
||||||
|
+ break;
|
||||||
|
+#ifdef HAVE_PTHREAD_MUTEXATTR_SETROBUST
|
||||||
|
+ case EOWNERDEAD:
|
||||||
|
+ // we cannot recover the state, so mark mutex as unusable
|
||||||
|
+ UNLOCK_MUTEX_R(env);
|
||||||
|
+ // FALLTHROUGH
|
||||||
|
+#endif
|
||||||
|
+ default:
|
||||||
|
+ return MDB_PANIC;
|
||||||
|
+ }
|
||||||
|
nr = ti->mti_numreaders;
|
||||||
|
for (i=0; i<nr; i++)
|
||||||
|
if (ti->mti_readers[i].mr_pid == 0)
|
||||||
|
@@ -2305,7 +2319,20 @@
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (ti) {
|
||||||
|
- LOCK_MUTEX_W(env);
|
||||||
|
+ rc = LOCK_MUTEX_W(env);
|
||||||
|
+ switch (rc)
|
||||||
|
+ {
|
||||||
|
+ case 0:
|
||||||
|
+ break;
|
||||||
|
+#ifdef HAVE_PTHREAD_MUTEXATTR_SETROBUST
|
||||||
|
+ case EOWNERDEAD:
|
||||||
|
+ // we cannot recover the state, so mark mutex as unusable
|
||||||
|
+ UNLOCK_MUTEX_W(env);
|
||||||
|
+ // FALLTHROUGH
|
||||||
|
+#endif
|
||||||
|
+ default:
|
||||||
|
+ return MDB_PANIC;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
txn->mt_txnid = ti->mti_txnid;
|
||||||
|
meta = env->me_metas[txn->mt_txnid & 1];
|
||||||
|
@@ -4014,6 +4041,12 @@
|
||||||
|
pthread_mutexattr_t mattr;
|
||||||
|
|
||||||
|
if ((rc = pthread_mutexattr_init(&mattr))
|
||||||
|
+#ifdef HAVE_PTHREAD_MUTEXATTR_SETTYPE
|
||||||
|
+ || (rc = pthread_mutexattr_settype(&mattr, PTHREAD_MUTEX_ERRORCHECK))
|
||||||
|
+#endif
|
||||||
|
+#ifdef HAVE_PTHREAD_MUTEXATTR_SETROBUST
|
||||||
|
+ || (rc = pthread_mutexattr_setrobust(&mattr, PTHREAD_MUTEX_ROBUST))
|
||||||
|
+#endif
|
||||||
|
|| (rc = pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED))
|
||||||
|
|| (rc = pthread_mutex_init(&env->me_txns->mti_mutex, &mattr))
|
||||||
|
|| (rc = pthread_mutex_init(&env->me_txns->mti_wmutex, &mattr)))
|
349
0002-Add-extra-tools-and-CFEngine-modifications-for-LMDB.patch
Normal file
349
0002-Add-extra-tools-and-CFEngine-modifications-for-LMDB.patch
Normal file
@ -0,0 +1,349 @@
|
|||||||
|
diff -wruN -x '*~' -x '*.o' -x '*.a' -x '*.so' -x '*.so.[0-9]' -x autom4te.cache -x .deps -x .libs ../orig-liblmdb/lmdump.c ./lmdump.c
|
||||||
|
--- ../orig-liblmdb/lmdump.c 1970-01-01 01:00:00.000000000 +0100
|
||||||
|
+++ ./lmdump.c 2014-07-28 17:50:23.263838569 +0200
|
||||||
|
@@ -0,0 +1,128 @@
|
||||||
|
+/* lmdump.c - Lmdb database dumper
|
||||||
|
+ Has three modes :
|
||||||
|
+ -a : print keys in ascii form
|
||||||
|
+ -A : print keys and values in ascii form
|
||||||
|
+ -x : print keys and values in hexadecimal form
|
||||||
|
+ -d : print only the size of keys and values
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#define _XOPEN_SOURCE 500 /* srandom(), random() */
|
||||||
|
+#include <stdio.h>
|
||||||
|
+#include <stdlib.h>
|
||||||
|
+#include <time.h>
|
||||||
|
+#include <string.h>
|
||||||
|
+#include "lmdb.h"
|
||||||
|
+
|
||||||
|
+static void print_hex(char *s, int len)
|
||||||
|
+{
|
||||||
|
+ int i = 0;
|
||||||
|
+ for (i=0; i<len; i++)
|
||||||
|
+ {
|
||||||
|
+ printf("%02x", s[i]);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void print_usage(void)
|
||||||
|
+{
|
||||||
|
+ printf("Lmdb database dumper\n");
|
||||||
|
+ printf("Usage: dump -d|-x|-a|-A filename\n\n");
|
||||||
|
+ printf("Has three modes :\n");
|
||||||
|
+ printf(" -a : print keys in ascii form\n");
|
||||||
|
+ printf(" -A : print keys and values in ascii form\n");
|
||||||
|
+ printf(" -x : print keys and values in hexadecimal form\n");
|
||||||
|
+ printf(" -d : print only the size of keys and values\n");
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int report_error(int rc)
|
||||||
|
+{
|
||||||
|
+ printf("err(%d): %s\n", rc, mdb_strerror(rc));
|
||||||
|
+ return rc;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int main(int argc, char * argv[])
|
||||||
|
+{
|
||||||
|
+ int rc;
|
||||||
|
+ MDB_env *env;
|
||||||
|
+ MDB_dbi dbi;
|
||||||
|
+ MDB_val key, data;
|
||||||
|
+ MDB_txn *txn;
|
||||||
|
+ MDB_cursor *cursor;
|
||||||
|
+
|
||||||
|
+ if (argc<3)
|
||||||
|
+ {
|
||||||
|
+ print_usage();
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ int mode = -1;
|
||||||
|
+ if (strcmp(argv[1],"-a") == 0)
|
||||||
|
+ {
|
||||||
|
+ mode = 'a';
|
||||||
|
+ }
|
||||||
|
+ else if (strcmp(argv[1],"-A") == 0)
|
||||||
|
+ {
|
||||||
|
+ mode = 'A';
|
||||||
|
+ }
|
||||||
|
+ else if(strcmp(argv[1],"-x") == 0)
|
||||||
|
+ {
|
||||||
|
+ mode = 'x';
|
||||||
|
+ }
|
||||||
|
+ else if(strcmp(argv[1],"-d") == 0)
|
||||||
|
+ {
|
||||||
|
+ mode = 'd';
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ print_usage();
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ rc = mdb_env_create(&env);
|
||||||
|
+ if(rc) return report_error(rc);
|
||||||
|
+
|
||||||
|
+ rc = mdb_env_open(env, argv[2], MDB_NOSUBDIR, 0644);
|
||||||
|
+ if(rc) return report_error(rc);
|
||||||
|
+
|
||||||
|
+ rc = mdb_txn_begin(env, NULL, MDB_RDONLY, &txn);
|
||||||
|
+ if(rc) return report_error(rc);
|
||||||
|
+
|
||||||
|
+ rc = mdb_open(txn, NULL, 0, &dbi);
|
||||||
|
+ if(rc) return report_error(rc);
|
||||||
|
+
|
||||||
|
+ rc = mdb_cursor_open(txn, dbi, &cursor);
|
||||||
|
+ if(rc) return report_error(rc);
|
||||||
|
+
|
||||||
|
+ while( (rc = mdb_cursor_get(cursor, &key, &data, MDB_NEXT)) ==0)
|
||||||
|
+ {
|
||||||
|
+ if (mode == 'A')
|
||||||
|
+ {
|
||||||
|
+ printf("key: %p[%d] %.*s\n",
|
||||||
|
+ key.mv_data, (int) key.mv_size, (int) key.mv_size, (char *) key.mv_data);
|
||||||
|
+ }
|
||||||
|
+ else if (mode == 'a')
|
||||||
|
+ {
|
||||||
|
+ printf("key: %p[%d] %.*s, data: %p[%d] %.*s\n",
|
||||||
|
+ key.mv_data, (int) key.mv_size, (int) key.mv_size, (char *) key.mv_data,
|
||||||
|
+ data.mv_data, (int) data.mv_size, (int) data.mv_size, (char *) data.mv_data);
|
||||||
|
+ }
|
||||||
|
+ else if (mode == 'd')
|
||||||
|
+ {
|
||||||
|
+ printf("key: %p[%d] ,data: %p[%d]\n",
|
||||||
|
+ key.mv_data, (int) key.mv_size,
|
||||||
|
+ data.mv_data, (int) data.mv_size);
|
||||||
|
+ }
|
||||||
|
+ else if (mode == 'x')
|
||||||
|
+ {
|
||||||
|
+ printf("key: %p[%d] ", key.mv_data, (int) key.mv_size);
|
||||||
|
+ print_hex(key.mv_data, (int) key.mv_size);
|
||||||
|
+ printf(" ,data: %p[%d] ", data.mv_data, (int) data.mv_size);
|
||||||
|
+ print_hex(data.mv_data, (int) data.mv_size);
|
||||||
|
+ printf("\n");
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ mdb_cursor_close(cursor);
|
||||||
|
+ mdb_close(env, dbi);
|
||||||
|
+
|
||||||
|
+ mdb_txn_abort(txn);
|
||||||
|
+ mdb_env_close(env);
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
diff -wruN -x '*~' -x '*.o' -x '*.a' -x '*.so' -x '*.so.[0-9]' -x autom4te.cache -x .deps -x .libs ../orig-liblmdb/lmmgr.c ./lmmgr.c
|
||||||
|
--- ../orig-liblmdb/lmmgr.c 1970-01-01 01:00:00.000000000 +0100
|
||||||
|
+++ ./lmmgr.c 2014-07-28 17:50:23.263838569 +0200
|
||||||
|
@@ -0,0 +1,201 @@
|
||||||
|
+/*
|
||||||
|
+lmmgr.c : Add, remove or manage the maxreaders value of a given database file
|
||||||
|
+*/
|
||||||
|
+#include <stdio.h>
|
||||||
|
+#include <string.h>
|
||||||
|
+#include "lmdb.h"
|
||||||
|
+
|
||||||
|
+static int report_error(int rc)
|
||||||
|
+{
|
||||||
|
+ printf("err(%d): %s\n", rc, mdb_strerror(rc));
|
||||||
|
+ return rc;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int openconn(const char *dbfile, MDB_env **env, long int maxreaders)
|
||||||
|
+{
|
||||||
|
+/*init*/
|
||||||
|
+ int rc;
|
||||||
|
+ rc = mdb_env_create(env);
|
||||||
|
+ if(rc) return report_error(rc);
|
||||||
|
+
|
||||||
|
+ rc = mdb_env_open(*env, dbfile, MDB_NOSUBDIR, 0644);
|
||||||
|
+ if(rc) return report_error(rc);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int gettxn(MDB_env *env, MDB_txn **txn, MDB_dbi *dbi)
|
||||||
|
+{
|
||||||
|
+ int rc;
|
||||||
|
+/*setup txn*/
|
||||||
|
+ rc = mdb_txn_begin(env, NULL, 0, txn);
|
||||||
|
+ if(rc) return report_error(rc);
|
||||||
|
+ rc = mdb_open(*txn, NULL, 0, dbi);
|
||||||
|
+ if(rc) return report_error(rc);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int committxn(MDB_txn *txn)
|
||||||
|
+{
|
||||||
|
+/*commit*/
|
||||||
|
+ int rc;
|
||||||
|
+ rc = mdb_txn_commit(txn);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int aborttxn(MDB_txn *txn)
|
||||||
|
+{
|
||||||
|
+/*abort*/
|
||||||
|
+ int rc;
|
||||||
|
+ mdb_txn_abort(txn);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int closeall(MDB_env *env, MDB_txn *txn, MDB_dbi dbi)
|
||||||
|
+{
|
||||||
|
+/*end*/
|
||||||
|
+ mdb_close(env, dbi);
|
||||||
|
+ mdb_env_close(env);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int do_put(char *dbfile, char *mykey, char *myval)
|
||||||
|
+{
|
||||||
|
+ MDB_env *env;
|
||||||
|
+ openconn(dbfile, &env, 0);
|
||||||
|
+
|
||||||
|
+ MDB_txn *txn;
|
||||||
|
+ MDB_dbi dbi;
|
||||||
|
+ gettxn(env, &txn, &dbi);
|
||||||
|
+
|
||||||
|
+ int rc;
|
||||||
|
+ MDB_val key, data;
|
||||||
|
+ key.mv_data = mykey;
|
||||||
|
+ data.mv_data = myval;
|
||||||
|
+ key.mv_size = strlen(mykey) + 1;
|
||||||
|
+ data.mv_size = strlen(myval) + 1;
|
||||||
|
+
|
||||||
|
+ rc = mdb_put(txn, dbi, &key, &data, MDB_NOOVERWRITE);
|
||||||
|
+ if (rc == MDB_SUCCESS)
|
||||||
|
+ {
|
||||||
|
+ rc = mdb_txn_commit(txn);
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ mdb_txn_abort(txn);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ mdb_env_close(env);
|
||||||
|
+ return rc;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int do_del(char *dbfile, char *mykey)
|
||||||
|
+{
|
||||||
|
+ MDB_env *env;
|
||||||
|
+ openconn(dbfile, &env, 0);
|
||||||
|
+
|
||||||
|
+ MDB_txn *txn;
|
||||||
|
+ MDB_dbi dbi;
|
||||||
|
+ gettxn(env, &txn, &dbi);
|
||||||
|
+
|
||||||
|
+ int rc;
|
||||||
|
+ MDB_val key;
|
||||||
|
+ key.mv_data = mykey;
|
||||||
|
+ key.mv_size = strlen(mykey) + 1;
|
||||||
|
+
|
||||||
|
+ rc = mdb_del(txn, dbi, &key, NULL);
|
||||||
|
+ if (rc == MDB_SUCCESS)
|
||||||
|
+ {
|
||||||
|
+ rc = mdb_txn_commit(txn);
|
||||||
|
+ }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ mdb_txn_abort(txn);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ mdb_env_close(env);
|
||||||
|
+ return rc;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int do_init(char *dbfile, unsigned long maxr)
|
||||||
|
+{
|
||||||
|
+ MDB_env *env;
|
||||||
|
+ openconn(dbfile, &env, maxr);
|
||||||
|
+ mdb_env_close(env);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int do_stat(char *dbfile)
|
||||||
|
+{
|
||||||
|
+ int rc;
|
||||||
|
+ MDB_env *env;
|
||||||
|
+ openconn(dbfile, &env, 0);
|
||||||
|
+
|
||||||
|
+ MDB_stat stat;
|
||||||
|
+ MDB_envinfo info;
|
||||||
|
+
|
||||||
|
+ rc = mdb_env_stat(env, &stat);
|
||||||
|
+ rc = mdb_env_info(env, &info);
|
||||||
|
+ printf("me_maxreaders=%ld\n", info.me_maxreaders);
|
||||||
|
+ mdb_env_close(env);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int main(int argc, char *argv[])
|
||||||
|
+{
|
||||||
|
+ if (argc < 3)
|
||||||
|
+ {
|
||||||
|
+ goto fail;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!strcmp(argv[1], "put"))
|
||||||
|
+ {
|
||||||
|
+ if (argc == 5)
|
||||||
|
+ {
|
||||||
|
+ int rc = do_put(argv[2], argv[3], argv[4]);
|
||||||
|
+ return rc;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ else if (!strcmp(argv[1], "del"))
|
||||||
|
+ {
|
||||||
|
+ if (argc == 4)
|
||||||
|
+ {
|
||||||
|
+ int rc = do_del(argv[2], argv[3]);
|
||||||
|
+ return rc;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ else if (!strcmp(argv[1], "init"))
|
||||||
|
+ {
|
||||||
|
+ if (argc == 3)
|
||||||
|
+ {
|
||||||
|
+ int rc = do_init(argv[2], 0L);
|
||||||
|
+ return rc;
|
||||||
|
+ }
|
||||||
|
+ else if (argc == 5 && !strcmp(argv[3], "-m"))
|
||||||
|
+ {
|
||||||
|
+ int rc = do_init(argv[2], atol(argv[4]));
|
||||||
|
+ do_stat(argv[2]);
|
||||||
|
+ return rc;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ else if (!strcmp(argv[1], "maxr"))
|
||||||
|
+ {
|
||||||
|
+ if (argc == 3)
|
||||||
|
+ {
|
||||||
|
+ int rc = do_stat(argv[2]);
|
||||||
|
+ return rc;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+fail:
|
||||||
|
+ printf("Usage :\n");
|
||||||
|
+ printf("Add a key and value to a DB file :\n");
|
||||||
|
+ printf("\tlmmgr put dbfile key value\n");
|
||||||
|
+ printf("Remove a key from a DB file :\n");
|
||||||
|
+ printf("\tlmmgr del dbfile key\n");
|
||||||
|
+ printf("Set a new maxreaders value of a DB file :\n");
|
||||||
|
+ printf("\tlmmgr init dbfile [-m maxreaders]\n");
|
||||||
|
+ printf("Give maxreaders value of a DB file :\n");
|
||||||
|
+ printf("\tlmmgr maxr dbfile\n");
|
||||||
|
+
|
||||||
|
+ return 1;
|
||||||
|
+}
|
||||||
|
diff -wruN -x '*~' -x '*.o' -x '*.a' -x '*.so' -x '*.so.[0-9]' -x autom4te.cache -x .deps -x .libs ../orig-liblmdb/Makefile.am ./Makefile.am
|
||||||
|
--- ../orig-liblmdb/Makefile.am 2014-07-28 17:44:34.137071474 +0200
|
||||||
|
+++ ./Makefile.am 2014-07-28 17:58:11.979702178 +0200
|
||||||
|
@@ -4,7 +4,7 @@
|
||||||
|
AM_CFLAGS = -W -Wall -Wno-unused-parameter -Wbad-function-cast -pthread
|
||||||
|
LDADD = liblmdb.la
|
||||||
|
|
||||||
|
-bin_PROGRAMS = mdb_copy mdb_stat
|
||||||
|
+bin_PROGRAMS = mdb_copy mdb_stat lmdump lmmgr
|
||||||
|
check_PROGRAMS = mtest mtest2 mtest3 mtest4 mtest5
|
||||||
|
man_MANS = mdb_copy.1 mdb_stat.1
|
||||||
|
include_HEADERS = lmdb.h
|
11
lmdb.changes
11
lmdb.changes
@ -1,3 +1,12 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jul 28 15:55:31 UTC 2014 - kkaempf@suse.com
|
||||||
|
|
||||||
|
- Prevent deadlock when process holding the db lock dies
|
||||||
|
0001-Patch-for-LMDB-to-use-robust-mutexes.patch
|
||||||
|
|
||||||
|
- command line tools for debugging
|
||||||
|
0002-Add-extra-tools-and-CFEngine-modifications-for-LMDB.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri May 16 20:00:29 UTC 2014 - jengelh@inai.de
|
Fri May 16 20:00:29 UTC 2014 - jengelh@inai.de
|
||||||
|
|
||||||
@ -13,7 +22,7 @@ Fri May 16 20:00:29 UTC 2014 - jengelh@inai.de
|
|||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Feb 12 13:53:21 UTC 2014 - kkaempf@suse.com
|
Wed Feb 12 13:53:21 UTC 2014 - kkaempf@suse.com
|
||||||
|
|
||||||
- Switch to cmake build
|
- Switch to cmake, fix dynamic lib build and versioning.
|
||||||
Drop liblmdb.patch
|
Drop liblmdb.patch
|
||||||
Add VERSION.cmake and CMakeLists.txt
|
Add VERSION.cmake and CMakeLists.txt
|
||||||
|
|
||||||
|
@ -28,6 +28,8 @@ Url: http://symas.com/mdb/
|
|||||||
#Git-Clone: git://git.openldap.org/openldap mdb.master
|
#Git-Clone: git://git.openldap.org/openldap mdb.master
|
||||||
Source: %{name}-%{version}.tar.bz2
|
Source: %{name}-%{version}.tar.bz2
|
||||||
Patch1: automake.diff
|
Patch1: automake.diff
|
||||||
|
Patch2: 0001-Patch-for-LMDB-to-use-robust-mutexes.patch
|
||||||
|
Patch3: 0002-Add-extra-tools-and-CFEngine-modifications-for-LMDB.patch
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
BuildRequires: automake >= 1.10
|
BuildRequires: automake >= 1.10
|
||||||
@ -76,7 +78,12 @@ the liblmdb library.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -qn liblmdb
|
%setup -qn liblmdb
|
||||||
%patch -P 1 -p1
|
# PATCH-FIX-OPENSUSE - autotools files, jengelh@inai.de
|
||||||
|
%patch1 -p1
|
||||||
|
# PATCH-FIX-UPSTREAM - prevent deadlock when process holding db lock dies, kkaempf@suse.de
|
||||||
|
%patch2 -p1
|
||||||
|
# PATCH-FIX-OPENSUSE - debugging tools (https://github.com/kacfengine/lmdb)
|
||||||
|
%patch3 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
mkdir -p m4
|
mkdir -p m4
|
||||||
|
Loading…
Reference in New Issue
Block a user