From: DRC Date: Fri, 21 Nov 2014 15:35:33 +0000 (+0000) Subject: Make TJCompressor.close() and TJDecompressor.close() idempotent X-Git-Tag: 1.4.2~16^2~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ef263e3e83fb190eb6ebcca753ffc385929883a8;p=libjpeg-turbo Make TJCompressor.close() and TJDecompressor.close() idempotent git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/branches/1.3.x@1420 632fc199-4ca6-4c93-a231-07263d6284db --- diff --git a/ChangeLog.txt b/ChangeLog.txt index 326ba5d..e366c6d 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -28,7 +28,14 @@ about every 25 million iterations. [6] Fixed a build issue on OS X PowerPC platforms (md5cmp failed to build because OS X does not provide the le32toh() and htole32() functions.) -[7] The TurboJPEG API previously generated an error ("Could not determine +[7] The close() method in the TJCompressor and TJDecompressor Java classes is +now idempotent. Previously, that method would call the native tjDestroy() +function even if the TurboJPEG instance had already been destroyed. This +caused an exception to be thrown during finalization, if the close() method had +already been called. The exception was caught, but it was still an expensive +operation. + +[8] The TurboJPEG API previously generated an error ("Could not determine subsampling type for JPEG image") when attempting to decompress grayscale JPEG images that were compressed with a sampling factor other than 1 (for instance, with 'cjpeg -grayscale -sample 2x2'). Subsampling technically has no meaning diff --git a/java/org/libjpegturbo/turbojpeg/TJCompressor.java b/java/org/libjpegturbo/turbojpeg/TJCompressor.java index 6fb653f..29c8b2a 100644 --- a/java/org/libjpegturbo/turbojpeg/TJCompressor.java +++ b/java/org/libjpegturbo/turbojpeg/TJCompressor.java @@ -496,7 +496,8 @@ public class TJCompressor { * Free the native structures associated with this compressor instance. */ public void close() throws Exception { - destroy(); + if (handle != 0) + destroy(); } protected void finalize() throws Throwable { diff --git a/java/org/libjpegturbo/turbojpeg/TJDecompressor.java b/java/org/libjpegturbo/turbojpeg/TJDecompressor.java index ec8ab77..8b98dcf 100644 --- a/java/org/libjpegturbo/turbojpeg/TJDecompressor.java +++ b/java/org/libjpegturbo/turbojpeg/TJDecompressor.java @@ -594,7 +594,8 @@ public class TJDecompressor { * Free the native structures associated with this decompressor instance. */ public void close() throws Exception { - destroy(); + if (handle != 0) + destroy(); } protected void finalize() throws Throwable {