diff --git a/.changes/next-release/bugfix-AWSSDKforJavav2-685db17.json b/.changes/next-release/bugfix-AWSSDKforJavav2-685db17.json new file mode 100644 index 000000000000..6d7ec0af732b --- /dev/null +++ b/.changes/next-release/bugfix-AWSSDKforJavav2-685db17.json @@ -0,0 +1,5 @@ +{ + "type": "bugfix", + "category": "AWS SDK for Java v2", + "description": "Fixing race condition in EventStreamAsyncResponseTransformer. Field eventsToDeliver is a LinkedList, i.e., not thread-safe. Accesses to field eventsToDeliver are protected by synchronization on itself, but not in 1 location." +} diff --git a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/eventstream/EventStreamAsyncResponseTransformer.java b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/eventstream/EventStreamAsyncResponseTransformer.java index d8437707427e..4f4ec847504b 100644 --- a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/eventstream/EventStreamAsyncResponseTransformer.java +++ b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/eventstream/EventStreamAsyncResponseTransformer.java @@ -394,7 +394,9 @@ public void onError(Throwable throwable) { @Override public void onComplete() { // Add the special on complete event to signal drainEvents to complete the subscriber - eventsToDeliver.add(ON_COMPLETE_EVENT); + synchronized (eventsToDeliver) { + eventsToDeliver.add(ON_COMPLETE_EVENT); + } drainEventsIfNotAlready(); transformFuture.complete(null); }