diff --git a/driver-sync/src/main/com/mongodb/client/gridfs/GridFSUploadStreamImpl.java b/driver-sync/src/main/com/mongodb/client/gridfs/GridFSUploadStreamImpl.java index 80fb6db7fb2..11cb0d012c1 100644 --- a/driver-sync/src/main/com/mongodb/client/gridfs/GridFSUploadStreamImpl.java +++ b/driver-sync/src/main/com/mongodb/client/gridfs/GridFSUploadStreamImpl.java @@ -138,12 +138,14 @@ public void write(final byte[] b, final int off, final int len) { @Override public void close() { - withLock(closeLock, () -> { - if (closed) { - return; - } + boolean alreadyClosed = withLock(closeLock, () -> { + boolean prevClosed = closed; closed = true; + return prevClosed; }); + if (alreadyClosed) { + return; + } writeChunk(); GridFSFile gridFSFile = new GridFSFile(fileId, filename, lengthInBytes, chunkSizeBytes, new Date(), metadata); diff --git a/driver-sync/src/test/functional/com/mongodb/client/gridfs/GridFSBucketSmokeTestSpecification.groovy b/driver-sync/src/test/functional/com/mongodb/client/gridfs/GridFSBucketSmokeTestSpecification.groovy index 80ea03d011a..8010d73a3b0 100644 --- a/driver-sync/src/test/functional/com/mongodb/client/gridfs/GridFSBucketSmokeTestSpecification.groovy +++ b/driver-sync/src/test/functional/com/mongodb/client/gridfs/GridFSBucketSmokeTestSpecification.groovy @@ -84,6 +84,7 @@ class GridFSBucketSmokeTestSpecification extends FunctionalSpecification { def outputStream = gridFSBucket.openUploadStream('myFile') outputStream.write(contentBytes) outputStream.close() + outputStream.close() // check for close idempotency fileId = outputStream.getObjectId() }