From 5299bd59023942ffba7a41bf553f3c99a218626b Mon Sep 17 00:00:00 2001 From: David Turner Date: Mon, 6 Sep 2021 17:36:56 +0100 Subject: [PATCH] Release weak ref too --- native/dispatch.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/native/dispatch.c b/native/dispatch.c index 345a7c2ad8..e2047315e7 100644 --- a/native/dispatch.c +++ b/native/dispatch.c @@ -3525,8 +3525,14 @@ Java_com_sun_jna_Native_ffi_1prep_1closure(JNIEnv *env, jclass UNUSED(cls), jlon } cb->object = (*env)->NewWeakGlobalRef(env, obj); + if (cb->object == NULL) { + // either obj was null or an OutOfMemoryError has been thrown + free(cb); + return 0; + } cb->closure = ffi_closure_alloc(sizeof(ffi_closure), L2A(&cb->x_closure)); if (cb->closure == NULL) { + (*env)->DeleteWeakGlobalRef(env, cb->object); free(cb); throwByName(env, EUnsupportedOperation, "Failed to allocate closure"); return 0; @@ -3536,6 +3542,7 @@ Java_com_sun_jna_Native_ffi_1prep_1closure(JNIEnv *env, jclass UNUSED(cls), jlon cb, cb->x_closure); if (ffi_error(env, "ffi_prep_cif", s)) { ffi_closure_free(cb->closure); + (*env)->DeleteWeakGlobalRef(env, cb->object); free(cb); return 0; }