CRYPTO-63 Add JNA binding Work-round for JVM crash if close called more than once
Project: http://git-wip-us.apache.org/repos/asf/commons-crypto/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-crypto/commit/6ed9de8a Tree: http://git-wip-us.apache.org/repos/asf/commons-crypto/tree/6ed9de8a Diff: http://git-wip-us.apache.org/repos/asf/commons-crypto/diff/6ed9de8a Branch: refs/heads/CRYPTO-1.0.0 Commit: 6ed9de8acbe16298350f4a2099776b3537d0bfb4 Parents: 94844c8 Author: Sebb <s...@apache.org> Authored: Sun Jul 10 14:01:56 2016 +0100 Committer: Sebb <s...@apache.org> Committed: Sun Jul 10 14:01:56 2016 +0100 ---------------------------------------------------------------------- .../org/apache/commons/crypto/jna/OpenSslJnaCipher.java | 10 +++++++++- .../apache/commons/crypto/jna/OpenSslJnaCipherTest.java | 9 --------- 2 files changed, 9 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/6ed9de8a/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCipher.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCipher.java b/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCipher.java index 285fbe7..f8ba94f 100644 --- a/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCipher.java +++ b/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCipher.java @@ -239,7 +239,10 @@ class OpenSslJnaCipher implements CryptoCipher { public void close() { if (context != null) { OpenSslNativeJna.EVP_CIPHER_CTX_cleanup(context); - OpenSslNativeJna.EVP_CIPHER_CTX_free(context); + // Freeing the context multiple times causes a JVM crash + // A work-round is to only free it at finalize time + // TODO is that sufficient? +// OpenSslNativeJna.EVP_CIPHER_CTX_free(context); } } @@ -328,4 +331,9 @@ class OpenSslJnaCipher implements CryptoCipher { return transformation; } + @Override + protected void finalize() throws Throwable { + OpenSslNativeJna.EVP_CIPHER_CTX_free(context); + super.finalize(); + } } http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/6ed9de8a/src/test/java/org/apache/commons/crypto/jna/OpenSslJnaCipherTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/jna/OpenSslJnaCipherTest.java b/src/test/java/org/apache/commons/crypto/jna/OpenSslJnaCipherTest.java index a84fb6f..4b69ac9 100644 --- a/src/test/java/org/apache/commons/crypto/jna/OpenSslJnaCipherTest.java +++ b/src/test/java/org/apache/commons/crypto/jna/OpenSslJnaCipherTest.java @@ -35,13 +35,4 @@ public class OpenSslJnaCipherTest extends OpenSslCipherTest { cipherClass = OpenSslJnaCipher.class.getName(); } - @Override - public void closeTestRepeat() { - System.err.println("closeTestRepeat() Causes JVM crash"); - } - - @Override - public void reInitAfterClose() { - System.err.println("reInitAfterClose() Causes JVM crash"); - } }