Thanks for the review Sergey.

-----Original Message-----
From: Sergey Bylokhov 
Sent: Wednesday, August 31, 2016 6:08 PM
To: Jayathirth D V
Cc: 2d-dev
Subject: Re: [OpenJDK 2D-Dev] [9] RFR JDK-4924727 : reader.abort() method does 
not work when called inside imageStarted for PNG

On 31.08.16 14:48, Jayathirth D V wrote:
> Hi Sergey,
>
> In case of JPEG whole read process is under a ThreadLock.
>     public BufferedImage read(int imageIndex, ImageReadParam param)
>         throws IOException {
>         setThreadLock();
>         try {
>             cbLock.check();
>             try {
>                 readInternal(imageIndex, param, false);

Then the fix looks fine.

>
> By others processXXX() do you mean processXXX() in other plugins or 
> processXXX() in case of JPEG?
> Please clarify.

I meant only the code related to jpeg.

>
> Thanks,
> Jay
>
> -----Original Message-----
> From: Sergey Bylokhov
> Sent: Wednesday, August 31, 2016 4:22 PM
> To: Jayathirth D V; Philip Race
> Cc: 2d-dev
> Subject: Re: [OpenJDK 2D-Dev] [9] RFR JDK-4924727 : reader.abort() 
> method does not work when called inside imageStarted for PNG
>
> I have only one question: should we call the new clearNativeReadAbortFlag(and 
> probably the others processXXX()) under the ThreadLock?
>
> On 31.08.16 13:07, Jayathirth D V wrote:
>> Hi Sergey,
>>
>> Thanks for the clarification.
>> I have updated the test case to use Files.delete().
>> Please find updated webrev for review:
>> http://cr.openjdk.java.net/~jdv/4924727/webrev.02/
>>
>> Regards,
>> Jay
>>
>> -----Original Message-----
>> From: Sergey Bylokhov
>> Sent: Monday, August 29, 2016 8:52 PM
>> To: Jayathirth D V
>> Cc: 2d-dev
>> Subject: Re: [OpenJDK 2D-Dev] [9] RFR JDK-4924727 : reader.abort() 
>> method does not work when called inside imageStarted for PNG
>>
>> On 29.08.16 18:07, Jayathirth D V wrote:
>>> Hi Sergey,
>>>
>>> I am not getting the usage of Files.delete() from its specification. Can 
>>> you please elaborate what special case it will handle in my test case?
>>> I am creating temporary file separately for all the readers and deleting 
>>> them.
>>
>> Files.delete() will throw an exception if the file cannot be deleted, and 
>> File.delete() will return false in such case.
>>
>> Also I am closing the ImageInputStream associated after read operation.
>>
>> But plugin itself can leak some streams and lock a temporary file, so
>> Files.delete() will catch this.
>>
>>
>>> -----Original Message-----
>>> From: Sergey Bylokhov
>>> Sent: Monday, August 29, 2016 8:25 PM
>>> To: Jayathirth D V; Philip Race
>>> Cc: Prasanta Sadhukhan; 2d-dev
>>> Subject: Re: [OpenJDK 2D-Dev] [9] RFR JDK-4924727 : reader.abort() 
>>> method does not work when called inside imageStarted for PNG
>>>
>>> Hi, Jay.
>>> Please delete the temporary file via Files.delete(), which will throw an 
>>> exception if the file is locked by some reader.
>>>
>>> On 29.08.16 11:42, Jayathirth D V wrote:
>>>> Hi Phil & Sergey,
>>>>
>>>> Thanks for your inputs.
>>>>
>>>> I have verified reader.abort() request for IIOReadProgressListener for all 
>>>> available plugins.
>>>>
>>>> Apart from PNG although all readers were able to abort read when we call 
>>>> reader.abort() from IIOReadProgressListener callbacks, they were not 
>>>> calling processReadAborted() right after IIOReadProgressListener 
>>>> callbacks. So I have made changes for the same.
>>>>
>>>> And in some readers before every read call they were not calling 
>>>> clearAbortRequest(), which is important because if we use same reader for 
>>>> another read() call it will be invalid unless we clear previous abort 
>>>> request.
>>>>
>>>> In case of JPEG since we are using native IJG library we need to update 
>>>> abortFlag present in imageioJPEG.c before every call as we are doing for 
>>>> other readers using clearAbortRequest().
>>>>
>>>> Since this has native and make changes I have verified changes 
>>>> through JPRT also which is successfully building on all platforms 
>>>> (http://scaaa637.us.oracle.com//archive/2016/08/2016-08-29-065104.jay.
>>>> client_commit//JobStatus.txt )
>>>>
>>>> Please find updated webrev for review:
>>>> http://cr.openjdk.java.net/~jdv/4924727/webrev.01/
>>>>
>>>> I noticed that in case on WBMP I was not getting ImageReader object to 
>>>> call setInput() in test case to verify the behavior of reader.abort(). So 
>>>> I have created separate bug for the same 
>>>> (https://bugs.openjdk.java.net/browse/JDK-8164930 ). And in case of WBMP 
>>>> we already have clearAbortRequest() call and also we are returning from 
>>>> IIOReadProgressListener callbacks properly, only thing here is we are not 
>>>> returning right after callbacks as we have updated other plugins.
>>>>
>>>> I want to verify writer plugins in separate bug as we already have lot of 
>>>> changes in this bug. So I have created 
>>>> https://bugs.openjdk.java.net/browse/JDK-8164931 and will be working on 
>>>> this bug.
>>>>
>>>> Thanks,
>>>> Jay
>>>>
>>>> -----Original Message-----
>>>> From: Phil Race
>>>> Sent: Thursday, August 18, 2016 1:42 AM
>>>> To: Sergey Bylokhov
>>>> Cc: Jayathirth D V; Prasanta Sadhukhan; 2d-dev
>>>> Subject: Re: [OpenJDK 2D-Dev] [9] RFR JDK-4924727 : reader.abort() 
>>>> method does not work when called inside imageStarted for PNG
>>>>
>>>> I think we can
>>>> - get all plugins,and for each
>>>> - write a file in that format
>>>> - read it back and apply the test
>>>>
>>>> It is also worth verifying that the writer abort checks are in sync with 
>>>> the reader aborts, ie happen at such equivalent points as might exist.
>>>>
>>>> -phil.
>>>>
>>>> On 08/15/2016 11:30 AM, Sergey Bylokhov wrote:
>>>>> Is it possible to unify the test for all our plugins? I assume 
>>>>> they should work in the same way. I am not sure but probably the 
>>>>> image can be generated at runtime?
>>>>>
>>>>> On 11.08.16 21:59, Jayathirth D V wrote:
>>>>>> Hi,
>>>>>>
>>>>>>
>>>>>>
>>>>>> Please review the following fix in JDK9 at your convenience:
>>>>>>
>>>>>>
>>>>>>
>>>>>> Bug : https://bugs.openjdk.java.net/browse/JDK-4924727
>>>>>>
>>>>>>
>>>>>>
>>>>>> Webrev : http://cr.openjdk.java.net/~jdv/4924727/webrev.00/
>>>>>>
>>>>>>
>>>>>>
>>>>>> Issue : When we issue ImageReader.abort() in 
>>>>>> IIOReadProgressListener.imageStarted(), reading is not aborted 
>>>>>> and it is continued.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Root cause : After IIOReadProgressListener.imageStarted() call in 
>>>>>> PNGImageReader.java when we enter decodeImage() we call
>>>>>> clearAbortRequest() which will clear the abort request from 
>>>>>> IIOReadProgressListener.imageStarted().
>>>>>>
>>>>>>
>>>>>>
>>>>>> Solution : clearAbortRequest() documentation mentions that it 
>>>>>> should be called before reading of image starts, so it should be 
>>>>>> called before IIOReadProgressListener.imageStarted()(In
>>>>>> PNGImageReader.java it is
>>>>>> processImageStarted(0) in readImage()). So moved
>>>>>> clearAbortRequest() call from decodeImage() to readImage(). Also 
>>>>>> we should call
>>>>>> abortRequested() in PNGImageReader.java at places mapping to 
>>>>>> IIOReadProgressListener and not randomly at end of functions or 
>>>>>> at places related to IIOReadUpdateListener, updated the code for the 
>>>>>> same.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Observation not related to this issue : We don't have call 
>>>>>> similar to
>>>>>> IIOReadProgressListener.readAborted() in IIOReadUpdateListener, 
>>>>>> but user can call ImageReader.abort() from IIOReadUpdateListener methods.
>>>>>> Is there a need to add similar method in IIOReadUpdateListener?
>>>>>> Any inputs on this also would be helpful.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> Jay
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>> --
>>> Best regards, Sergey.
>>>
>>
>>
>
>
> --
> Best regards, Sergey.
>


--
Best regards, Sergey.

Reply via email to