@@ -79,7 +79,7 @@ static void lmdb_close(lmdb_env_t* lmdb) {
7979
8080static void lmdb_dtor (ErlNifEnv * env , void * obj ) {
8181 __UNUSED (env );
82- INFO_LOG ("env-dtor is destroying lmdb.env -> %p" , obj );
82+ INFO ("env-dtor is destroying lmdb.env -> %p" , obj );
8383 lmdb_env_t * lmdb = (lmdb_env_t * )obj ;
8484 lmdb_close (lmdb );
8585}
@@ -106,7 +106,7 @@ static void lmdb_cursor_close(lmdb_cursor_t* cursor) {
106106}
107107static void lmdb_cursor_dtor (ErlNifEnv * env , void * obj ) {
108108 __UNUSED (env );
109- INFO_LOG ("cursor-dtor is destroying, with lmdb.env: %p" , obj );
109+ INFO ("cursor-dtor is destroying, with lmdb.env: %p" , obj );
110110 lmdb_cursor_t * cursor = (lmdb_cursor_t * )obj ;
111111 lmdb_cursor_close (cursor );
112112}
@@ -161,7 +161,6 @@ static ERL_NIF_TERM elmdb_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv
161161 unsigned int dbiflags = 0 ;
162162 CHECK (mdb_dbi_flags (rotxn , subdb , & dbiflags ), err1 );
163163 DBG ("subdb -> name=%s, dbi=%d, dbiflags=%u" , dbname , subdb , dbiflags );
164- enif_fprintf (stdout ,"subdb -> name=%s, dbi=%d, dbiflags=%u\r\n" , dbname , subdb , dbiflags );
165164 kh_value (layers , k ) = subdb ;
166165 //mdb_dbi_close(ctx, subdb);
167166 }
@@ -173,6 +172,7 @@ static ERL_NIF_TERM elmdb_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv
173172
174173 lmdb_env_t * handle = enif_alloc_resource (lmdbEnvResType , sizeof (* handle ));
175174 if (handle == NULL ) FAIL_ERR (ENOMEM , err1 );
175+ // why commit? If the transaction is aborted the dbi will be closed automatically
176176 mdb_txn_commit (rotxn );
177177
178178 handle -> env = ctx ;
@@ -215,7 +215,7 @@ static ERL_NIF_TERM elmdb_close(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
215215 ErlNifBinary layBin; \
216216 if (!enif_inspect_iolist_as_binary(env, lterm, &layBin)) { \
217217 err = enif_make_tuple2(env, ATOM_ERROR, \
218- enif_make_tuple2(env, ATOM_DBI_NOT_FOUND , lterm)); \
218+ enif_make_tuple2(env, ATOM_WRONG_TYPE , lterm)); \
219219 goto label; \
220220 } \
221221 memcpy(layer, layBin.data, layBin.size); \
@@ -226,9 +226,13 @@ static ERL_NIF_TERM elmdb_path(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv
226226 lmdb_env_t * handle = NULL ;
227227 CHECKOUT_ARG_FOR_DB (handle );
228228
229+ int ret ;
230+ ERL_NIF_TERM err ;
229231 const char * path ;
230- mdb_env_get_path (handle -> env , & path );
232+ CHECK ( mdb_env_get_path (handle -> env , & path ), err0 );
231233 return enif_make_string (env , path , ERL_NIF_LATIN1 );
234+ err0 :
235+ return err ;
232236}
233237
234238static ERL_NIF_TERM elmdb_drop (ErlNifEnv * env , int argc , const ERL_NIF_TERM argv []) {
@@ -297,8 +301,7 @@ static ERL_NIF_TERM elmdb_count(ErlNifEnv* env, int argc, const ERL_NIF_TERM arg
297301
298302 MDB_txn * txn = NULL ;
299303 CHECK (mdb_txn_begin (handle -> env , NULL , MDB_RDONLY , & txn ), err0 );
300- //MDB_dbi dbi;
301- //CHECK(mdb_dbi_open(txn, dbname, 0, &dbi), err1);
304+
302305 MDB_stat mst ;
303306 CHECK (mdb_stat (txn , dbi , & mst ), err1 );
304307 mdb_txn_abort (txn );
@@ -325,7 +328,7 @@ typedef struct my_key_s {
325328 case ERL_NIF_TERM_TYPE_BITSTRING: \
326329 if (!enif_inspect_binary(env, kterm, &mykey.keyBin)) { \
327330 err = enif_make_tuple2(env, ATOM_ERROR, \
328- enif_make_tuple2(env, ATOM_WRONGKEY , kterm)); \
331+ enif_make_tuple2(env, ATOM_WRONG_TYPE , kterm)); \
329332 goto label; \
330333 } \
331334 mykey.key.mv_size = mykey.keyBin.size; \
@@ -335,7 +338,7 @@ typedef struct my_key_s {
335338 case ERL_NIF_TERM_TYPE_INTEGER: \
336339 if (!enif_get_int64(env, kterm, (ErlNifSInt64*)&mykey.keyInt)) { \
337340 err = enif_make_tuple2(env, ATOM_ERROR, \
338- enif_make_tuple2(env, ATOM_WRONGKEY , kterm)); \
341+ enif_make_tuple2(env, ATOM_WRONG_TYPE , kterm)); \
339342 goto label; \
340343 } \
341344 mykey.key.mv_size = sizeof(ErlNifSInt64); \
@@ -598,6 +601,7 @@ static ERL_NIF_TERM elmdb_ls(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]
598601 ERL_NIF_TERM list = enif_make_list (env , 0 );
599602 const char * dbname = NULL ;
600603 MDB_dbi dbi ;
604+ __UNUSED (dbi );
601605 enif_rwlock_rlock (handle -> layers_rwlock );
602606 kh_foreach (handle -> layers , dbname , dbi , {
603607 ERL_NIF_TERM hd = enif_make_string (env , dbname , ERL_NIF_LATIN1 );
@@ -853,7 +857,9 @@ static ERL_NIF_TERM hello(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
853857 CHECKOUT_ARG_FOR_DB (handle );
854858 unsigned readers = 0 ;
855859 mdb_env_get_maxreaders (handle -> env , & readers );
860+ INFO ("Maxreaders: %u" , readers );
856861 DBG ("maxreaders: %u" , readers );
862+ WARN ("maxreaders: %u" , readers );
857863
858864 int ret ;
859865 MDB_txn * txn = NULL ;
@@ -900,7 +906,7 @@ static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
900906 ATOM_NOT_FOUND = enif_make_atom (env , "not_found" );
901907 ATOM_DBI_NOT_FOUND = enif_make_atom (env , "dbi_not_found" );
902908 ATOM_EXISTS = enif_make_atom (env , "exists" );
903-
909+ ATOM_WRONG_TYPE = enif_make_atom ( env , "wrong_type" );
904910 ATOM_KEYEXIST = enif_make_atom (env , "key_exist" );
905911 ATOM_NOTFOUND = enif_make_atom (env , "notfound" );
906912 ATOM_CORRUPTED = enif_make_atom (env , "corrupted" );
0 commit comments