dermesser / leveldb-rs

A reimplementation of LevelDB in Rust (no bindings).
Other
515 stars 60 forks source link

Possible memory leak when use iterator #51

Open SergeyPalam opened 1 week ago

SergeyPalam commented 1 week ago

I write some code for testing crate:

use memory_stats::memory_stats;
use rusty_leveldb::{DB, LdbIterator, Options};

fn mem_trace(msg: &str){
    if let Some(usage) = memory_stats() {
        println!("Current virtual memory usage in {}: {}", msg, usage.virtual_mem);
    }
}

fn iterate_over_db() {
    let mut opts = Options::default();
    opts.create_if_missing = false;
    let mut db = DB::open("leveldb", opts).unwrap();
    let mut iter = db.new_iter().unwrap();
    while let Some((_, _)) = iter.next() {
    }
}

fn main() {
    mem_trace("Before use LDB");
    iterate_over_db();
    mem_trace("After use LDB");
}

and find that after iterate_over_db() allocated memory hasn't freed. For "leveldb" I use local storage Google Chrome.