diff --git a/core/src/main/java/lucee/transformer/dynamic/meta/dynamic/FunctionMemberDynamic.java b/core/src/main/java/lucee/transformer/dynamic/meta/dynamic/FunctionMemberDynamic.java index bbc2855a0b..5f740f389e 100644 --- a/core/src/main/java/lucee/transformer/dynamic/meta/dynamic/FunctionMemberDynamic.java +++ b/core/src/main/java/lucee/transformer/dynamic/meta/dynamic/FunctionMemberDynamic.java @@ -369,16 +369,16 @@ public String[] getArguments() { public Class[] getArgumentClasses() { if (argClasses == null) { ClassLoader cl = Clazz.getClassLoader(this.declaringClass); - argClasses = new Class[argTypes.length]; + Class[] tmp = new Class[argTypes.length]; for (int i = 0; i < argTypes.length; i++) { try { - - argClasses[i] = Clazz.toClass(cl, argTypes[i]); + tmp[i] = Clazz.toClass(cl, argTypes[i]); } catch (ClassException e) { throw new PageRuntimeException(e); } } + argClasses = tmp; } return argClasses; } diff --git a/loader/build.xml b/loader/build.xml index d467b51b01..648cabeafe 100644 --- a/loader/build.xml +++ b/loader/build.xml @@ -2,7 +2,7 @@ - + diff --git a/loader/pom.xml b/loader/pom.xml index 1b2a9fd073..1b74eb1ddb 100644 --- a/loader/pom.xml +++ b/loader/pom.xml @@ -3,7 +3,7 @@ org.lucee lucee - 6.2.0.98-SNAPSHOT + 6.2.0.99-SNAPSHOT jar Lucee Loader Build diff --git a/test/tickets/LDEV5103.cfc b/test/tickets/LDEV5103.cfc new file mode 100644 index 0000000000..154384a180 --- /dev/null +++ b/test/tickets/LDEV5103.cfc @@ -0,0 +1,25 @@ +component extends="org.lucee.cfml.test.LuceeTestCase" skip="true" { + + function run( testResults , testBox ) { + describe( title='LDEV-5103', body=function(){ + + it( title='concurrency issue in Clazz.getArgumentClasses', body=function() { + var names=[]; + loop from=1 to=100 index="local.i" { + var name="t5103-#i#"; + arrayAppend(names, name); + thread name="#name#" { + variables.dateParser = createObject("java", "java.text.SimpleDateFormat").init("yyyy-MM-dd'T'HH:mm:ssX"); + } + } + + thread action="join" name=names.toList(); + loop array=names item="name" { + if(structKeyExists(cfthread[name],"ERROR")) throw cfthread[name].error; + } + }); + + }); + } + +} \ No newline at end of file