8185092: Data race in FilterOutputStream.close

Change boolean instance variable "closed" to an AtomicBoolean.

Reviewed-by: martin, alanb, redestad
This commit is contained in:
Brian Burkhalter 2017-07-27 13:13:19 -07:00
parent ae5e7de919
commit d5769843a5

View File

@ -50,7 +50,12 @@ public class FilterOutputStream extends OutputStream {
/**
* Whether the stream is closed; implicitly initialized to false.
*/
private boolean closed;
private volatile boolean closed;
/**
* Object used to prevent a race on the 'closed' instance variable.
*/
private final Object closeLock = new Object();
/**
* Creates an output stream filter built on top of the specified
@ -165,7 +170,12 @@ public class FilterOutputStream extends OutputStream {
if (closed) {
return;
}
closed = true;
synchronized (closeLock) {
if (closed) {
return;
}
closed = true;
}
Throwable flushException = null;
try {