Hi folks,
Found a problem in LargeSelect - the list of results is passed using
ArrayList.sublist to the populateObjects() method, but in the meantime
results may still be being added to the list by a separate Thread, which
results in a ConcurrentModificationException.
Need to construct a new ArrayList containing results to pass to
populateObjects(), and synchronize on returnResults when constructing
the new list or adding/removing from the main one.
I might be wrong, but I think this patch is worthwhile:
/usr/bin/cvs diff -w LargeSelect.java
Index: LargeSelect.java
===================================================================
RCS file: /home/cvspublic/jakarta-turbine-
torque/src/java/org/apache/torque/util/LargeSelect.java,v
retrieving revision 1.7
diff -w -r1.7 LargeSelect.java
647c647,651
< List returnResults = results.subList(fromIndex, toIndex);
---
> List returnResults;
>
> synchronized (results) {
> returnResults = new ArrayList(results.subList(fromIndex,
toIndex));
> }
718a723
> synchronized (results) {
722a728
> }
730a737
> synchronized (results) {
731a739
> }
Gareth
---
Development Team Leader, eGS, 5-7 Singer Street, London EC2A 4BQ. +44
(0)20 7336 1440
CONFIDENTIALITY: This is email is confidential and intended solely for
the use of the individual to whom it is addressed.� Any views or
opinions presented are solely those of the author and do not necessarily
represent those of eGovernment Solutions (UK) Ltd.� If you are not the
intended recipient, be advised that you have received this email in
error and that any use, dissemination, forwarding, or copying of this
email is strictly prohibited.� If you have received this email in error
please contact the sender.