From 16e22740df36a3d28f8bcc5e9d8bd1c1f670f75a Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Thu, 29 Apr 2021 18:28:36 +0000 Subject: [PATCH] Don't FREE things when we holds_ref if we're not calling *_free After this we still only have minor leaks across 128 runs of HumanObjectPeerTest: 314 allocations remained for 1126840 bytes. --- gen_type_mapping.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gen_type_mapping.py b/gen_type_mapping.py index 475e132b..ba29e0af 100644 --- a/gen_type_mapping.py +++ b/gen_type_mapping.py @@ -310,7 +310,7 @@ class TypeMappingGenerator: base_conv = base_conv + "\n" + ty_info.var_name + "_conv = " + ty_info.rust_obj.replace("LDK", "") + "_clone((" + ty_info.rust_obj + "*)(((uint64_t)" + ty_info.var_name + ") & ~1));" elif needs_full_clone: base_conv = base_conv + "\n// Warning: we may need a move here but no clone is available for " + ty_info.rust_obj - if not needs_full_clone and ty_info.rust_obj != "LDKu8slice": + if not needs_full_clone and ty_info.rust_obj != "LDKu8slice" and (not holds_ref or is_free): # Don't bother free'ing slices passed in - Rust doesn't auto-free the # underlying unlike Vecs, and it gives Java more freedom. base_conv = base_conv + "\nFREE((void*)" + ty_info.var_name + ");" -- 2.30.2