From ee86b5273c4dc71ef7928ff665f8ee0e8c177791 Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Tue, 13 Jun 2023 12:43:39 +0200 Subject: [PATCH 1/2] [hermes] Fix memory leak --- hermes/Cargo.lock | 2 +- hermes/Cargo.toml | 2 +- hermes/src/network/p2p.rs | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/hermes/Cargo.lock b/hermes/Cargo.lock index 8ed8dc6e17..b67e2e14b2 100644 --- a/hermes/Cargo.lock +++ b/hermes/Cargo.lock @@ -1926,7 +1926,7 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermes" -version = "0.1.0" +version = "0.1.1" dependencies = [ "anyhow", "async-trait", diff --git a/hermes/Cargo.toml b/hermes/Cargo.toml index de88252431..1ae75d5a3b 100644 --- a/hermes/Cargo.toml +++ b/hermes/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hermes" -version = "0.1.0" +version = "0.1.1" edition = "2021" [dependencies] diff --git a/hermes/src/network/p2p.rs b/hermes/src/network/p2p.rs index 7d1d540266..2ecbe8ca37 100644 --- a/hermes/src/network/p2p.rs +++ b/hermes/src/network/p2p.rs @@ -81,6 +81,8 @@ extern "C" fn proxy(o: ObservationC) { { log::error!("Failed to send observation: {}", e); } + + unsafe { libc::free(o.vaa as *mut std::ffi::c_void) }; } /// This function handles bootstrapping libp2p (in Go) and listening for Wormhole Observations. From 05045bab49e751685cd73436f12f4496fc068a7b Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Tue, 13 Jun 2023 13:30:17 +0200 Subject: [PATCH 2/2] Free on the go side instead --- hermes/src/network/p2p.go | 2 +- hermes/src/network/p2p.rs | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/hermes/src/network/p2p.go b/hermes/src/network/p2p.go index 493c8b3250..2c6ffcc463 100644 --- a/hermes/src/network/p2p.go +++ b/hermes/src/network/p2p.go @@ -203,11 +203,11 @@ func RegisterObservationCallback(f C.callback_t, network_id, bootstrap_addrs, li case *GossipMessage_SignedVaaWithQuorum: vaaBytes := msg.GetSignedVaaWithQuorum().GetVaa() cBytes := C.CBytes(vaaBytes) - defer C.free(cBytes) C.invoke(f, C.observation_t{ vaa: (*C.char)(cBytes), vaa_len: C.size_t(len(vaaBytes)), }) + C.free(cBytes) } } } diff --git a/hermes/src/network/p2p.rs b/hermes/src/network/p2p.rs index 2ecbe8ca37..7d1d540266 100644 --- a/hermes/src/network/p2p.rs +++ b/hermes/src/network/p2p.rs @@ -81,8 +81,6 @@ extern "C" fn proxy(o: ObservationC) { { log::error!("Failed to send observation: {}", e); } - - unsafe { libc::free(o.vaa as *mut std::ffi::c_void) }; } /// This function handles bootstrapping libp2p (in Go) and listening for Wormhole Observations.