> Please consider this PR which makes `DeflaterOutputStream.close()` always 
> close its wrapped output stream exactly once.
> 
> Currently, closing of the wrapped output stream happens outside the finally 
> block where `finish()` is called. If `finish()` throws, this means the 
> wrapped stream will not be closed. This can potentially lead to leaking 
> resources such as file descriptors or sockets.
> 
> This fix is to move the closing of the wrapped stream inside the finally 
> block.
> 
> Additionally, the `closed = true;` statement is moved to the start of the 
> close method. This makes sure we only ever close the wrapped stream once 
> (this aligns with the overridden method `FilterOutputStream.close´)
> 
> Specification: This change brings the implementation of 
> `DeflaterOutputStream.close()` in line with its specification:  *Writes 
> remaining compressed data to the output stream and closes the underlying 
> stream.*
> 
> Risk: This is a behavioural change. There is a small risk that existing code 
> depends on the close method not following its specification.
> 
> Testing: The PR adds a new JUnit 5 test `CloseWrappedStream.java` which 
> simulates the failure condition and verifies that the wrapped stream was 
> closed under failing and non-failing conditions.

Eirik Bjørsnøs has updated the pull request incrementally with one additional 
commit since the last revision:

  Spell out what is checked by each test instead of using the word "correct"

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/17209/files
  - new: https://git.openjdk.org/jdk/pull/17209/files/96deca07..39a14de3

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=17209&range=04
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=17209&range=03-04

  Stats: 40 lines in 1 file changed: 33 ins; 1 del; 6 mod
  Patch: https://git.openjdk.org/jdk/pull/17209.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/17209/head:pull/17209

PR: https://git.openjdk.org/jdk/pull/17209

Reply via email to