Skip to content

Commit dc4d9b4

Browse files
committed
8362898: Remove finalize() methods from javax.imageio TIFF classes
Reviewed-by: azvegint, jdv
1 parent da3a5da commit dc4d9b4

3 files changed

Lines changed: 40 additions & 13 deletions

File tree

src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFBaseJPEGCompressor.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555
import javax.imageio.stream.ImageOutputStream;
5656
import javax.imageio.stream.MemoryCacheImageOutputStream;
5757
import org.w3c.dom.Node;
58+
import sun.java2d.Disposer;
59+
import sun.java2d.DisposerRecord;
5860

5961
/**
6062
* Base class for all possible forms of JPEG compression in TIFF.
@@ -219,12 +221,14 @@ protected void initJPEGWriter(boolean supportsStreamMetadata,
219221
if(supportsStreamMetadata) {
220222
String smName = spi.getNativeStreamMetadataFormatName();
221223
if(smName == null || !smName.equals(STREAM_METADATA_NAME)) {
224+
this.JPEGWriter.dispose();
222225
this.JPEGWriter = null;
223226
}
224227
}
225228
if(this.JPEGWriter != null && supportsImageMetadata) {
226229
String imName = spi.getNativeImageMetadataFormatName();
227230
if(imName == null || !imName.equals(IMAGE_METADATA_NAME)) {
231+
this.JPEGWriter.dispose();
228232
this.JPEGWriter = null;
229233
}
230234
}
@@ -263,6 +267,12 @@ protected void initJPEGWriter(boolean supportsStreamMetadata,
263267

264268
// Set the writer.
265269
this.JPEGWriter = writer;
270+
// The JDK built-in JPEGImageWriter will self-dispose.
271+
// So a Disposer is only needed here if it is an unknown reader.
272+
// This is not common, so likely this will rarely be needed.
273+
if (!(this.JPEGWriter instanceof com.sun.imageio.plugins.jpeg.JPEGImageWriter)) {
274+
Disposer.addRecord(this, new ImageWriterDisposerRecord(this.JPEGWriter));
275+
}
266276
break;
267277
}
268278

@@ -435,11 +445,16 @@ public final int encode(byte[] b, int off,
435445
return compDataLength;
436446
}
437447

438-
@SuppressWarnings("removal")
439-
protected void finalize() throws Throwable {
440-
super.finalize();
441-
if(JPEGWriter != null) {
442-
JPEGWriter.dispose();
448+
private static class ImageWriterDisposerRecord implements DisposerRecord {
449+
private final ImageWriter writer;
450+
451+
public ImageWriterDisposerRecord(ImageWriter writer) {
452+
this.writer = writer;
453+
}
454+
455+
@Override
456+
public void dispose() {
457+
writer.dispose();
443458
}
444459
}
445460
}

src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFJPEGDecompressor.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
import javax.imageio.stream.ImageInputStream;
3535
import javax.imageio.plugins.tiff.BaselineTIFFTagSet;
3636
import javax.imageio.plugins.tiff.TIFFField;
37+
import sun.java2d.Disposer;
38+
import sun.java2d.DisposerRecord;
3739

3840
public class TIFFJPEGDecompressor extends TIFFDecompressor {
3941
// Start of Image
@@ -65,6 +67,13 @@ public void beginDecoding() {
6567
// Initialize reader to the first one.
6668
this.JPEGReader = iter.next();
6769

70+
// The JDK built-in ImageReader will self-dispose.
71+
// So a Disposer is only needed here if it is an unknown reader.
72+
// This is not common, so likely this will rarely be needed.
73+
if (!(this.JPEGReader instanceof com.sun.imageio.plugins.jpeg.JPEGImageReader)) {
74+
Disposer.addRecord(this, new ImageReaderDisposerRecord(this.JPEGReader));
75+
}
76+
6877
this.JPEGParam = JPEGReader.getDefaultReadParam();
6978
}
7079

@@ -139,9 +148,16 @@ public void decodeRaw(byte[] b,
139148
JPEGReader.read(0, JPEGParam);
140149
}
141150

142-
@SuppressWarnings("removal")
143-
protected void finalize() throws Throwable {
144-
super.finalize();
145-
JPEGReader.dispose();
151+
private static class ImageReaderDisposerRecord implements DisposerRecord {
152+
private final ImageReader reader;
153+
154+
public ImageReaderDisposerRecord(ImageReader reader) {
155+
this.reader = reader;
156+
}
157+
158+
@Override
159+
public void dispose() {
160+
reader.dispose();
161+
}
146162
}
147163
}

src/java.desktop/share/classes/com/sun/imageio/plugins/tiff/TIFFOldJPEGDecompressor.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -610,8 +610,4 @@ public void decodeRaw(byte[] b,
610610
JPEGReader.read(0, JPEGParam);
611611
}
612612

613-
protected void finalize() throws Throwable {
614-
super.finalize();
615-
JPEGReader.dispose();
616-
}
617613
}

0 commit comments

Comments
 (0)