<AWT Dev> [8] Review request for 8027151: AWT_DnD/Basic_DnD/Automated/DnDMerlinQL/MultipleJVM failing on windows machine
Oleg Pekhovskiy
oleg.pekhovskiy at oracle.com
Tue Oct 29 07:39:57 PDT 2013
Hi Anthony,
I could refer to the fix for JDK-7075105. the finally {} block was added
there and had never existed before.
Here's the way InputStream passed to DataTransferer.getInstance().
translateStream() gets closed:
In out case DataTransferer.translateStream() calls
DataTransferer.translateStreamToInputStream() on line 1776 where
the stream is passed to ReencodingInputStream constructor. It is then
passed to InputStreamReader constructor. Both classes override close()
method where ReencodingInputStream closes referenced InputStreamReader and
InputStreamReader closes referenced InputStream.
ReencodingInputStream is returned by
SunDropTargetContextPeer.getTransferData() method, called by
DataFlavor.getReaderForText() that returns it to the client code.
So it's a client code obligation to call ReencodingInputStream.close().
This is the use case for the test mentioned in the issue description.
But in general we should investigate each use case to avoid memory
leaks. As Petr pointed out it makes sense to do it for JDK 9, because it
could be risky for now.
Thanks,
Oleg
On 29.10.2013 16:41, Anthony Petrov wrote:
> Hi Oleg,
>
> I'm not an expert in this code so I may ask some silly questions.
>
> I'm OK with the change #2.
>
> Regarding #1: could you please clarify what code is responsible for
> closing the stream now, after your fix? Is this documented/enforced
> anywhere (i.e. a finally{} block or something)? Have you run any
> regression tests to make sure this change doesn't introduce any memory
> leaks? Why was this not a problem before that we decided to fix this
> particular piece now, so late in the release?
>
> --
> best regards,
> Anthony
>
> On 10/28/2013 02:41 AM, Oleg Pekhovskiy wrote:
>> Hi all,
>>
>> please review the fix
>> http://cr.openjdk.java.net/~bagiras/8027151.1/
>> for
>> https://bugs.openjdk.java.net/browse/JDK-8027151
>>
>> This issue appeared after the changes made for JDK-7075105.
>> There were two problems:
>> 1. In drop target code, in SunDropTargetContextPeer.getTransferData()
>> method inputStream was closed in finally scope but was not yet used in
>> client code (indirectly). Just its reference stored for the future in
>> DataTransferer.getInstance().translateStream() call.
>>
>> 2. In drop target code, in DataTransferer.translateStream() there was no
>> String object handler (it was moved from
>> DataTransferer.translateBytesOrStream() only to
>> DataTransferer.translateBytes() method).
>>
>> Thanks,
>> Oleg
More information about the awt-dev
mailing list