diff --git a/lib/experiment/local/evaluation/evaluation.rb b/lib/experiment/local/evaluation/evaluation.rb index cb836b5..58920c6 100644 --- a/lib/experiment/local/evaluation/evaluation.rb +++ b/lib/experiment/local/evaluation/evaluation.rb @@ -23,7 +23,7 @@ class Kotlin < FFI::Struct class Libevaluation_interop_ExportedSymbols < FFI::Struct layout :DisposeStablePointer, callback([:pointer], :void), - :DisposeString, callback([:string], :void), + :DisposeString, callback([:pointer], :void), :IsInstance, callback([:pointer, :string], :pointer), :createNullableByte, callback([:string], :pointer), :getNonNullValueOfByte, callback([:pointer], :pointer), @@ -59,9 +59,13 @@ class Libevaluation_interop_ExportedSymbols < FFI::Struct def evaluation(rule_json, user_json) lib = EvaluationInterop.libevaluation_interop_symbols() - fn = lib[:kotlin][:root][:evaluate] - result_json = fn.call(rule_json, user_json).read_string + evaluate = lib[:kotlin][:root][:evaluate] + dispose = lib[:DisposeString] + result_raw = evaluate.call(rule_json, user_json) + result_json = result_raw.read_string result = JSON.parse(result_json) + dispose.call(result_raw) + if result["error"] != nil raise "#{result["error"]}" elsif result["result"] == nil