mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
chore: make it harder to misuse raw pointers (#5447)
This commit is contained in:
@ -32,30 +32,31 @@ fn bench_get_rand(c: &mut Criterion) {
|
||||
fn bench_get_rand_raw(c: &mut Criterion) {
|
||||
let n = 100u32;
|
||||
let (_dir, env) = setup_bench_db(n);
|
||||
let _txn = env.begin_ro_txn().unwrap();
|
||||
let db = _txn.open_db(None).unwrap();
|
||||
let txn = env.begin_ro_txn().unwrap();
|
||||
let db = txn.open_db(None).unwrap();
|
||||
|
||||
let mut keys: Vec<String> = (0..n).map(get_key).collect();
|
||||
keys.shuffle(&mut XorShiftRng::from_seed(Default::default()));
|
||||
|
||||
let dbi = db.dbi();
|
||||
let txn = _txn.txn();
|
||||
|
||||
let mut key_val: MDBX_val = MDBX_val { iov_len: 0, iov_base: ptr::null_mut() };
|
||||
let mut data_val: MDBX_val = MDBX_val { iov_len: 0, iov_base: ptr::null_mut() };
|
||||
|
||||
c.bench_function("bench_get_rand_raw", |b| {
|
||||
b.iter(|| unsafe {
|
||||
let mut i: size_t = 0;
|
||||
for key in &keys {
|
||||
key_val.iov_len = key.len() as size_t;
|
||||
key_val.iov_base = key.as_bytes().as_ptr() as *mut _;
|
||||
txn.with_raw_tx_ptr(|txn| {
|
||||
let mut i: size_t = 0;
|
||||
for key in &keys {
|
||||
key_val.iov_len = key.len() as size_t;
|
||||
key_val.iov_base = key.as_bytes().as_ptr() as *mut _;
|
||||
|
||||
mdbx_get(txn, dbi, &key_val, &mut data_val);
|
||||
mdbx_get(txn, dbi, &key_val, &mut data_val);
|
||||
|
||||
i += key_val.iov_len;
|
||||
}
|
||||
black_box(i);
|
||||
i += key_val.iov_len;
|
||||
}
|
||||
black_box(i);
|
||||
});
|
||||
})
|
||||
});
|
||||
}
|
||||
@ -84,13 +85,12 @@ fn bench_put_rand(c: &mut Criterion) {
|
||||
|
||||
fn bench_put_rand_raw(c: &mut Criterion) {
|
||||
let n = 100u32;
|
||||
let (_dir, _env) = setup_bench_db(0);
|
||||
let (_dir, env) = setup_bench_db(0);
|
||||
|
||||
let mut items: Vec<(String, String)> = (0..n).map(|n| (get_key(n), get_data(n))).collect();
|
||||
items.shuffle(&mut XorShiftRng::from_seed(Default::default()));
|
||||
|
||||
let dbi = _env.begin_ro_txn().unwrap().open_db(None).unwrap().dbi();
|
||||
let env = _env.env();
|
||||
let dbi = env.begin_ro_txn().unwrap().open_db(None).unwrap().dbi();
|
||||
|
||||
let mut key_val: MDBX_val = MDBX_val { iov_len: 0, iov_base: ptr::null_mut() };
|
||||
let mut data_val: MDBX_val = MDBX_val { iov_len: 0, iov_base: ptr::null_mut() };
|
||||
@ -98,19 +98,21 @@ fn bench_put_rand_raw(c: &mut Criterion) {
|
||||
c.bench_function("bench_put_rand_raw", |b| {
|
||||
b.iter(|| unsafe {
|
||||
let mut txn: *mut MDBX_txn = ptr::null_mut();
|
||||
mdbx_txn_begin_ex(env, ptr::null_mut(), 0, &mut txn, ptr::null_mut());
|
||||
env.with_raw_env_ptr(|env| {
|
||||
mdbx_txn_begin_ex(env, ptr::null_mut(), 0, &mut txn, ptr::null_mut());
|
||||
|
||||
let mut i: ::libc::c_int = 0;
|
||||
for (key, data) in items.iter() {
|
||||
key_val.iov_len = key.len() as size_t;
|
||||
key_val.iov_base = key.as_bytes().as_ptr() as *mut _;
|
||||
data_val.iov_len = data.len() as size_t;
|
||||
data_val.iov_base = data.as_bytes().as_ptr() as *mut _;
|
||||
let mut i: ::libc::c_int = 0;
|
||||
for (key, data) in items.iter() {
|
||||
key_val.iov_len = key.len() as size_t;
|
||||
key_val.iov_base = key.as_bytes().as_ptr() as *mut _;
|
||||
data_val.iov_len = data.len() as size_t;
|
||||
data_val.iov_base = data.as_bytes().as_ptr() as *mut _;
|
||||
|
||||
i += mdbx_put(txn, dbi, &key_val, &mut data_val, 0);
|
||||
}
|
||||
assert_eq!(0, i);
|
||||
mdbx_txn_abort(txn);
|
||||
i += mdbx_put(txn, dbi, &key_val, &mut data_val, 0);
|
||||
}
|
||||
assert_eq!(0, i);
|
||||
mdbx_txn_abort(txn);
|
||||
});
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user