Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
Bug ID: 4690773
Votes 1
Synopsis Multipage TIFF file decoding is not thread safe
Category jai:codec_sample
Reported Against 1.1.1_01
Release Fixed 1.1.3-beta
State 10-Fix Delivered, bug
Priority: 4-Low
Related Bugs
Submit Date 23-MAY-2002
Description
Bug reported by customer, HervM-	 Guillemet,  xxxxx :

"The TIFF decoder seems to be thread
unsafe. When getTiles are called simultaneously on several image coming
from a single multipage tiff file, I can get, for some of the images :

With packbits TIFF :

java.lang.RuntimeException: Unable to decode Packbits compressed data -
not enough data.
        at com.sun.media.jai.codecimpl.TIFFImage.decodePackbits(TIFFImage.java:1925)
        at com.sun.media.jai.codecimpl.TIFFImage.getTile(TIFFImage.java:1566)
        at javax.media.jai.RenderedImageAdapter.getTile(RenderedImageAdapter.java:146)
        at javax.media.jai.NullOpImage.computeTile(NullOpImage.java:170)
        at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:848)
        at javax.media.jai.OpImage.getTile(OpImage.java:851)

With Zip TIFF :
java.lang.RuntimeException: Error inflating data: unknown compression
method
        at com.sun.media.jai.codecimpl.TIFFImage.inflate(TIFFImage.java:185)
        at com.sun.media.jai.codecimpl.TIFFImage.getTile(TIFFImage.java:1573)
        at javax.media.jai.RenderedImageAdapter.getTile(RenderedImageAdapter.java:146)
        at javax.media.jai.NullOpImage.computeTile(NullOpImage.java:170)
        at com.sun.media.jai.util.SunTileScheduler.scheduleTile(SunTileScheduler.java:848)
        at javax.media.jai.OpImage.getTile(OpImage.java:851)


With no compression, I don't get any exception but some images are just
missing or are wrong.


Testcase :

---
import java.awt.image.*;
import javax.media.jai.*;
import com.sun.media.jai.codec.*;
import java.io.*;

class T {
  public static void main(String[] a) {
    try {
      ImageDecoder id = ImageCodec.createImageDecoder("tiff",
                                                      new File(a[0]),
                                                      null);
      final RenderedImage[] ri = new RenderedImage[id.getNumPages()];
      for (int i=0; i<ri.length; i++)
        ri[i] = id.decodeAsRenderedImage(i);
      for (int i=0; i<ri.length; i++) {
        final RenderedImage r = ri[i];
        new Thread() {  public void run() { r.getData(); } }.start();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

---

== HervM-	 Guillemet
    xxxxx 
"
Posted Date : 2005-11-17 01:20:57.0
Work Around
N/A
Evaluation
A separate instance of TIFFImage is created for each page in the multi-page TIFF and all of them refers to the same stream. All references to the stream are contained in a single method, getTile(), or methods that it in turn calls and getTile() is synchronized. This does not force synchronization of this method across all TIFFImage instances however.
Posted Date : 2005-11-17 01:20:57.0
Comments
  
  Include a link with my name & email   


PLEASE NOTE: JDK6 is formerly known as Project Mustang