From 9d3e3c53d533384e5eb48882cb68f32110d9ef45 Mon Sep 17 00:00:00 2001 From: Tom de Bruijn Date: Fri, 8 Jul 2022 11:36:38 +0300 Subject: [PATCH] Fix appsignal_free_* FFI missing pointer arguments The `appsignal_free_transaction` and `appsignal_free_data` Rust extension function calls were missing their argument definitions in the FFI declaration. These are the function definitions from the `appsignal.h` file, downloaded upon installation. ```c void appsignal_free_transaction(appsignal_transaction_t*); void appsignal_free_data(appsignal_data_t*); ``` Fixes #854 where users saw very high CPU usage because the function call was being retried indefinitely. Co-authored-by: Raimonds Simanovskis --- .changesets/fix-ffi-arguments-for-free-functions.md | 6 ++++++ lib/appsignal/extension/jruby.rb | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 .changesets/fix-ffi-arguments-for-free-functions.md diff --git a/.changesets/fix-ffi-arguments-for-free-functions.md b/.changesets/fix-ffi-arguments-for-free-functions.md new file mode 100644 index 000000000..986ad18d6 --- /dev/null +++ b/.changesets/fix-ffi-arguments-for-free-functions.md @@ -0,0 +1,6 @@ +--- +bump: "patch" +type: "fix" +--- + +Fix FFI function calls missing arguments for `appsignal_free_transaction` and `appsignal_free_data` extension functions. This fixes a high CPU issue when these function calls would be retried indefinitely. diff --git a/lib/appsignal/extension/jruby.rb b/lib/appsignal/extension/jruby.rb index e7ef37165..5f9f8141b 100644 --- a/lib/appsignal/extension/jruby.rb +++ b/lib/appsignal/extension/jruby.rb @@ -83,7 +83,7 @@ def self.lib_extension # Transaction methods attach_function :appsignal_free_transaction, - [], + [:pointer], :void attach_function :appsignal_start_transaction, [:appsignal_string, :appsignal_string, :long], @@ -191,7 +191,7 @@ def self.lib_extension :void # Data struct methods - attach_function :appsignal_free_data, [], :void + attach_function :appsignal_free_data, [:pointer], :void attach_function :appsignal_data_map_new, [], :pointer attach_function :appsignal_data_array_new, [], :pointer attach_function :appsignal_data_map_set_string,