import org.lwjgl.PointerBuffer;
import org.lwjgl.util.lmdb.LMDB;
import org.lwjgl.system.MemoryStack;
import org.lwjgl.system.MemoryUtil;
import org.lwjgl.util.lmdb.MDBVal;
import java.io.*;
import java.nio.IntBuffer;
public class CrashLmdb {
static long env;
static int db;
public static void main(String[] args) throws IOException {
try (MemoryStack stack = MemoryStack.stackPush()) {
File dir = new File("/home/joshua/Data1");
PointerBuffer envPointer = stack.mallocPointer(1);
LMDB.mdb_env_create(envPointer);
env = envPointer.get(0);
LMDB.mdb_env_set_mapsize(env, 1024 * 1024 * 1024);
LMDB.mdb_env_set_maxreaders(env, 512);
LMDB.mdb_env_set_maxdbs(env, 512);
LMDB.mdb_env_open(env, dir.getPath(), 0, 0644);
}
try (MemoryStack stack = MemoryStack.stackPush()) {
IntBuffer dbPointer = stack.mallocInt(1);
PointerBuffer txnPointer = stack.mallocPointer(1);
LMDB.mdb_txn_begin(env, MemoryUtil.NULL, 0, txnPointer);
long txn = txnPointer.get(0);
LMDB.mdb_dbi_open(txn, "mydb", LMDB.MDB_CREATE|LMDB.MDB_DUPSORT, dbPointer);
LMDB.mdb_txn_commit(txn);
db = dbPointer.get(0);
}
try (MemoryStack stack = MemoryStack.stackPush()) {
PointerBuffer txnPointer = stack.mallocPointer(1);
LMDB.mdb_txn_begin(env, MemoryUtil.NULL, 0, txnPointer);
long txn = txnPointer.get(0);
PointerBuffer cursorPointer = stack.mallocPointer(1);
long cursor = cursorPointer.get(0);
LMDB.mdb_cursor_open(txn, db,cursorPointer);
MDBVal key = MDBVal.callocStack(stack);
MDBVal value = MDBVal.callocStack(stack);
key.mv_data(stack.ASCII("AA ABE AMS ", false));
value.mv_data(stack.ASCII("001AA ABE AMS KMZ 00100009", false));
LMDB.mdb_cursor_put(cursor, key, value, 0);
LMDB.mdb_cursor_close(cursor);
LMDB.mdb_txn_commit(txn);
}
}
}
just run the above code will cause a JVM crash, please point the db directory to a clean directory. Hope this could help you help me.
