On Sat, 16 Apr 2022 11:05:47 GMT, Jaikiran Pai <[email protected]> wrote:
>> Alan Bateman has updated the pull request with a new target base due to a
>> merge or a rebase. The incremental webrev excludes the unrelated changes
>> brought in by the merge/rebase. The pull request contains five additional
>> commits since the last revision:
>>
>> - Refresh
>> - Refresh
>> - Merge with jdk-19+18
>> - Refresh
>> - Initial push
>
> src/java.base/share/classes/java/io/FilterInputStream.java line 233:
>
>> 231: */
>> 232: @Override
>> 233: public void reset() throws IOException {
>
> I suspect this change to remove synchronization from `mark()` and `reset()`
> is intentional. The `FilterInputStream` class doesn't explain the thread
> safety semantics, nor can I find commit history which would hint on why these
> (and only these) methods were syncrhonized. But it looks like this
> synchronization was there to serialize calls to `mark()` and `reset()` on the
> same `FilterInputStream` from multiple threads. With this synchronization now
> removed, subclasses or even direct usages of `FilterInputStream` would now be
> impacted. Potentially outside of the JDK. Would that be a concern?
Yes, this is intentional but it would be great to split out this change and get
them into the main line in advance. There is a JEP size task required to
re-visit all of the locking in java.io. In the case of the input/output
streams, most of it is not documented and there are several inconsistencies. In
the case of FilterInputStream, it doesn't use synchronization for the other ops.
-------------
PR: https://git.openjdk.java.net/jdk/pull/8166