Looping a query: concurrency issue with internal call to get current row

Description

We have detected an issue where a thread will become hung at an internal Lucee call from QueryImpl to get the current row.

The thread will run until it timesout and profiling shows that is stuck on a call to .g() on the currRow hashmap in queryImpl.java (below from Lucee 5.3.1.95):

1 2 3 4 5 lucee.commons.collection.HashMapPro.g(HashMapPro.java:317) // stuck here lucee.runtime.type.QueryImpl.getCurrentrow(QueryImpl.java:1040) lucee.runtime.type.it.ForEachQueryIterator.<init>(ForEachQueryIterator.java:42) lucee.runtime.type.QueryImpl.getIterator(QueryImpl.java:3116) lucee.runtime.util.ForEachUtil.forEach(ForEachUtil.java:51)

Looks like the currRow should be a ConcurrentHashMap.

Environment

None

Status

Assignee

Michael Offner

Reporter

Dominic Watson

Labels

None

Fix versions

Priority

New