nostrdb-rs

nostrdb in rust!
git clone git://jb55.com/nostrdb-rs
Log | Files | Refs | Submodules | README | LICENSE

commit 22fa1cc57ee1b4ce10e726ab284bc124461c8871
parent 114915eb5f0bb8912af0d7a7863d658bd79790a1
Author: William Casarin <jb55@jb55.com>
Date:   Mon, 17 Mar 2025 11:22:14 -0700

filter: fix memory leak in clone

We can't use Default for ndb_filter in Clone, since the default
instance allocates. We are effectivly allocating twice. This

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Msrc/filter.rs | 27++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/src/filter.rs b/src/filter.rs @@ -16,7 +16,26 @@ pub struct Filter { impl Clone for Filter { fn clone(&self) -> Self { - let mut new_filter: bindings::ndb_filter = Default::default(); + // Default inits... + //let mut new_filter: bindings::ndb_filter = Default::default(); + let null = null_mut(); + let mut new_filter = bindings::ndb_filter { + finalized: 0, + elem_buf: bindings::cursor { + start: null, + p: null, + end: null, + }, + data_buf: bindings::cursor { + start: null, + p: null, + end: null, + }, + num_elements: 0, + current: -1, + elements: [0, 0, 0, 0, 0, 0, 0], + }; + debug!("cloning filter"); unsafe { bindings::ndb_filter_clone( @@ -574,6 +593,12 @@ impl Drop for Filter { } } +impl Drop for FilterBuilder { + fn drop(&mut self) { + debug!("dropping filter builder"); + } +} + #[derive(Debug, Copy, Clone)] pub struct MutFilterIter<'a> { filter: &'a bindings::ndb_filter,