From 3f2b737bc7969ec863fde42298c60a9bb04c3da6 Mon Sep 17 00:00:00 2001 From: Jeff Yemin Date: Wed, 30 Nov 2022 09:51:37 -0500 Subject: [PATCH] Move check for previous value of "closed" outside of lambda JAVA-4821 --- .../mongodb/client/gridfs/GridFSUploadStreamImpl.java | 10 ++++++---- .../gridfs/GridFSBucketSmokeTestSpecification.groovy | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) 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() }