From fe6f30a10ddb37d343975dd229070e7cc39027b5 Mon Sep 17 00:00:00 2001 From: Anagha Date: Fri, 30 Jan 2026 12:13:12 +0530 Subject: [PATCH 1/2] fix for defect-304924 jarata/rest/issue-1322 --- .../tck/ws/rs/common/util/LinkedHolder.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/util/LinkedHolder.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/util/LinkedHolder.java index 60906227c..7ab8446b2 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/util/LinkedHolder.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/util/LinkedHolder.java @@ -16,13 +16,15 @@ package ee.jakarta.tck.ws.rs.common.util; +import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; +import java.util.List; /** * Hold multiple instances of TYPE in a {@link LinkedList} structure, last one * accessible by {@link #get()}. - * + * * @param */ public class LinkedHolder extends Holder implements Iterable { @@ -36,7 +38,7 @@ public LinkedHolder(TYPE type) { public LinkedHolder() { } - public void add(TYPE value) { + public synchronized void add(TYPE value) { list.add(value); super.set(value); } @@ -45,7 +47,7 @@ public void add(TYPE value) { * Replace the last item in the list */ @Override - public void set(TYPE value) { + public synchronized void set(TYPE value) { if (list.size() != 0) { list.set(list.size() - 1, value); super.set(value); @@ -57,27 +59,30 @@ public void set(TYPE value) { } } - public TYPE get(int index) { + public synchronized TYPE get(int index) { if (index >= list.size()) return null; return list.get(index); } - public int size() { + public synchronized int size() { return list.size(); } - public void clear() { + public synchronized void clear() { super.set(null); list.clear(); } @Override - public Iterator iterator() { - return list.iterator(); + public synchronized Iterator iterator() { + // Fix for https://github.com/jakartaee/rest/issues/1322 + // Create a copy to avoid ConcurrentModificationException when iterating while another thread modifies the list + List iteratorCopy = new ArrayList<>(list); + return iteratorCopy.iterator(); } - public LinkedList asList() { + public synchronized LinkedList asList() { return list; } From 7f684287262ee5c83fb71985078fd50ae3b34a20 Mon Sep 17 00:00:00 2001 From: Anagha Date: Fri, 6 Feb 2026 10:33:43 +0530 Subject: [PATCH 2/2] copyright added --- .../java/ee/jakarta/tck/ws/rs/common/util/LinkedHolder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/util/LinkedHolder.java b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/util/LinkedHolder.java index 7ab8446b2..b9bb73f62 100644 --- a/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/util/LinkedHolder.java +++ b/jaxrs-tck/src/main/java/ee/jakarta/tck/ws/rs/common/util/LinkedHolder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2021 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2026 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0, which is available at