From 6486c90d913a413f247eef84742ce3c474738933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Fri, 8 Mar 2024 22:36:59 +0100 Subject: [PATCH] Check CallbackReference#cbstruct for null when checking existing Reference The CallbackReference is held in a WeahHashMap, where it might be removed from when it becomes eligable for GC. For this there is a null guard in place, but when the callback reference is explicitly closed, the associated native structure is freed and "nulled", this case also needs to be guarded. --- src/com/sun/jna/CallbackReference.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/sun/jna/CallbackReference.java b/src/com/sun/jna/CallbackReference.java index b452b9424..9533fb715 100644 --- a/src/com/sun/jna/CallbackReference.java +++ b/src/com/sun/jna/CallbackReference.java @@ -508,7 +508,7 @@ private static Pointer getFunctionPointer(Callback cb, boolean direct) { Map map = direct ? directCallbackMap : callbackMap; synchronized(pointerCallbackMap) { CallbackReference cbref = map.get(cb); - if (cbref == null) { + if (cbref == null || cbref.cbstruct == null) { cbref = new CallbackReference(cb, callingConvention, direct); map.put(cb, cbref); pointerCallbackMap.put(cbref.getTrampoline(),