From: Matt Corallo Date: Thu, 29 Apr 2021 18:28:36 +0000 (+0000) Subject: Don't FREE things when we holds_ref if we're not calling *_free X-Git-Tag: v0.0.98~1^2~23 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=16e22740df36a3d28f8bcc5e9d8bd1c1f670f75a;p=ldk-java 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. --- 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 + ");"