alef 0.23.33

Opinionated polyglot binding generator for Rust libraries
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    @Override
    public void close() {
        try {
            MemorySegment freeAddr = LOOKUP.find("{{ ffi_prefix }}_{{ service_snake }}_free")
                .or(() -> LOOKUP.find("_{{ ffi_prefix }}_{{ service_snake }}_free"))
                .orElseThrow();
            FunctionDescriptor freeDesc = FunctionDescriptor.ofVoid(ValueLayout.ADDRESS);
            MethodHandle freeHandle = LINKER.downcallHandle(freeAddr, freeDesc);
            if (ownerHandle != null) {
                freeHandle.invoke(ownerHandle);
                ownerHandle = null;
            }
            arena.close();
        } catch (Throwable e) {
            throw new RuntimeException("Failed to close service", e);
        }
    }
}