From 9d7efca8a587677c73f9c847ba0f09ce220e5a75 Mon Sep 17 00:00:00 2001 From: heck Date: Mon, 5 Jul 2021 16:04:49 +0200 Subject: [PATCH 1/5] JNI-160: close() on obj with handle == 0 does nothing (no decrement either) --- src/codegen/gen_java_Message.ysl2 | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/codegen/gen_java_Message.ysl2 b/src/codegen/gen_java_Message.ysl2 index 7c3b201..1cc2404 100644 --- a/src/codegen/gen_java_Message.ysl2 +++ b/src/codegen/gen_java_Message.ysl2 @@ -69,9 +69,11 @@ tstylesheet { } public final void close() { - release(handle); - handle = 0; - instanceCount--; + if(handle != 0) { + release(handle); + handle = 0; + instanceCount--; + } } public static int getInstanceCount() { From aff9fa861fd4038d988e877cf916289d309b2f26 Mon Sep 17 00:00:00 2001 From: heck Date: Mon, 5 Jul 2021 16:21:27 +0200 Subject: [PATCH 2/5] JNI-160: synchronized close() method --- src/codegen/gen_java_Message.ysl2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codegen/gen_java_Message.ysl2 b/src/codegen/gen_java_Message.ysl2 index 1cc2404..b84ae29 100644 --- a/src/codegen/gen_java_Message.ysl2 +++ b/src/codegen/gen_java_Message.ysl2 @@ -68,7 +68,7 @@ tstylesheet { instanceCount++; } - public final void close() { + public synchronized final void close() { if(handle != 0) { release(handle); handle = 0; From 21119a64193c6b1c7dd802338ff3e8b3043cb1dd Mon Sep 17 00:00:00 2001 From: heck Date: Mon, 5 Jul 2021 16:22:04 +0200 Subject: [PATCH 3/5] JNI-160: synchronized getInstanceCount() method --- src/codegen/gen_java_Message.ysl2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codegen/gen_java_Message.ysl2 b/src/codegen/gen_java_Message.ysl2 index b84ae29..6a81c51 100644 --- a/src/codegen/gen_java_Message.ysl2 +++ b/src/codegen/gen_java_Message.ysl2 @@ -76,7 +76,7 @@ tstylesheet { } } - public static int getInstanceCount() { + public static synchronized AtomicLong getInstanceCount() { return instanceCount; } From 24f801b38194730278cbd65954f180afe3b38705 Mon Sep 17 00:00:00 2001 From: heck Date: Mon, 5 Jul 2021 16:22:49 +0200 Subject: [PATCH 4/5] JNI-160: change "instanceCount" to be AtomicLong --- src/codegen/gen_java_Message.ysl2 | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/codegen/gen_java_Message.ysl2 b/src/codegen/gen_java_Message.ysl2 index 6a81c51..8b13da8 100644 --- a/src/codegen/gen_java_Message.ysl2 +++ b/src/codegen/gen_java_Message.ysl2 @@ -33,18 +33,19 @@ tstylesheet { import java.util.Date; import java.util.HashMap; import java.io.Serializable; + import java.util.concurrent.atomic.AtomicLong; public class «$cname» implements MessageInterface, AutoCloseable, Serializable { private static final long serialVersionUID = 2119420428331150924L; private long handle; - private static int instanceCount = 0; + private static AtomicLong instanceCount = new AtomicLong(0); native long init(); native void release(long handle); public «$cname»() { handle = init(); - instanceCount++; + instanceCount.getAndIncrement(); } private native long _«$cname»( @@ -54,7 +55,7 @@ tstylesheet { public «$cname»(String mime_text) { byte[] _mime_text = Utils.toUTF8(mime_text); handle = _«$cname»(_mime_text); - instanceCount++; + instanceCount.getAndIncrement(); } private native byte[] _encodeMIME() throws pEpException; @@ -65,14 +66,14 @@ tstylesheet { private «$cname»(long h) { handle = h; - instanceCount++; + instanceCount.getAndIncrement(); } public synchronized final void close() { if(handle != 0) { release(handle); handle = 0; - instanceCount--; + instanceCount.getAndDecrement(); } } From 85f75a895f98ea55326953b6713bb062e4835611 Mon Sep 17 00:00:00 2001 From: heck Date: Mon, 5 Jul 2021 16:23:30 +0200 Subject: [PATCH 5/5] JNI-160: Update Tests (jni135) --- .../java/foundation/pEp/jniadapter/test/jni135/TestAlice.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/java/foundation/pEp/jniadapter/test/jni135/TestAlice.java b/test/java/foundation/pEp/jniadapter/test/jni135/TestAlice.java index ba62213..9e1d9a5 100644 --- a/test/java/foundation/pEp/jniadapter/test/jni135/TestAlice.java +++ b/test/java/foundation/pEp/jniadapter/test/jni135/TestAlice.java @@ -99,10 +99,10 @@ class TestAlice { msg1Enc.close(); msg1Plain.close(); log("cycle nr: " + cycles++ + " / Message.getInstanceCount(): " + Message.getInstanceCount()); - assert Message.getInstanceCount() == 0 : "Leaking messages"; + assert Message.getInstanceCount().get() == 0 : "Leaking messages"; } else { log("cycle nr: " + cycles++ + " / Message.getInstanceCount(): " + Message.getInstanceCount()); - assert Message.getInstanceCount() > 0 : "We should be leaking messages, actually"; + assert Message.getInstanceCount().get() > 0 : "We should be leaking messages, actually"; } } }