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:
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,