evmjit: Release call outputs

This commit is contained in:
Paweł Bylica 2017-12-12 12:48:34 +01:00
parent 10ee998a04
commit 5fc5f538ba
No known key found for this signature in database
GPG key ID: 7A0C037434FE77EF

View file

@ -19,6 +19,7 @@ package vm
/* /*
#include <evmjit.h> #include <evmjit.h>
#include <stdlib.h>
static const struct evm_context_fn_table* get_context_fn_table() static const struct evm_context_fn_table* get_context_fn_table()
@ -67,6 +68,16 @@ static void evm_release_result(struct evm_result* result)
result->release(result); result->release(result);
} }
static void free_result_output(const struct evm_result* result)
{
free((void*)result->output_data);
}
static void add_result_releaser(struct evm_result* result)
{
result->release = free_result_output;
}
#cgo CFLAGS: -I/home/chfast/Projects/ethereum/evmjit/include #cgo CFLAGS: -I/home/chfast/Projects/ethereum/evmjit/include
#cgo LDFLAGS: -levmjit-standalone -lstdc++ -lm -ldl -L/home/chfast/Projects/ethereum/evmjit/build/release-llvm/libevmjit #cgo LDFLAGS: -levmjit-standalone -lstdc++ -lm -ldl -L/home/chfast/Projects/ethereum/evmjit/build/release-llvm/libevmjit
*/ */
@ -390,8 +401,10 @@ func call(result *C.struct_evm_result, pCtx unsafe.Pointer, msg *C.struct_evm_me
cOutput := C.CBytes(output) cOutput := C.CBytes(output)
result.output_data = (*C.uint8_t)(cOutput) result.output_data = (*C.uint8_t)(cOutput)
result.output_size = C.size_t(len(output)) result.output_size = C.size_t(len(output))
// FIXME: free output // We can use result.release = C.release_result_output, but there are
result.release = nil // some problems with linking. Probably definition of
// release_result_output() must be in different C file.
C.add_result_releaser(result)
} else { } else {
result.output_data = nil result.output_data = nil
result.output_size = 0 result.output_size = 0