Project

Profile

Help

Bug #4363

closed

ConcurrentModificationException in XQueryCompiler

Added by Gunther Rademacher over 4 years ago. Updated over 4 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Multithreading
Sprint/Milestone:
-
Start date:
2019-10-28
Due date:
% Done:

0%

Estimated time:
Legacy ID:
Applies to branch:
9.9, trunk
Fix Committed on Branch:
9.9, trunk
Fixed in Maintenance Release:
Platforms:

Description

A ConcurrentModificationException occurred when running multiple compilations using the same instance of XQueryCompiler:

java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
	at java.util.ArrayList$Itr.next(ArrayList.java:859)
	at net.sf.saxon.expr.Assignation.addReference(Assignation.java:403)
	at net.sf.saxon.expr.LocalVariableReference.copy(LocalVariableReference.java:72)
	at net.sf.saxon.expr.InstanceOfExpression.copy(InstanceOfExpression.java:205)
	at net.sf.saxon.expr.OrExpression.copy(OrExpression.java:95)
	at net.sf.saxon.expr.instruct.Choose.copy(Choose.java:566)
	at net.sf.saxon.expr.LetExpression.copy(LetExpression.java:690)
	at com.saxonica.ee.bytecode.ByteCodeCandidate.copy(ByteCodeCandidate.java:113)
	at com.saxonica.ee.optim.OptimizerEE.tryInlineFunctionCall(OptimizerEE.java:1128)
	at net.sf.saxon.expr.UserFunctionCall.optimize(UserFunctionCall.java:406)
	at net.sf.saxon.expr.Operand.optimize(Operand.java:206)
	at net.sf.saxon.expr.Expression.optimizeChildren(Expression.java:617)
	at net.sf.saxon.expr.Expression.optimize(Expression.java:594)
	at net.sf.saxon.ma.arrays.SquareArrayConstructor.optimize(SquareArrayConstructor.java:143)
	at net.sf.saxon.expr.Operand.optimize(Operand.java:206)
	at net.sf.saxon.expr.SlashExpression.optimize(SlashExpression.java:352)
	at net.sf.saxon.expr.flwor.FLWORExpression.optimize(FLWORExpression.java:463)
	at net.sf.saxon.query.XQueryExpression.<init>(XQueryExpression.java:89)
	at com.saxonica.ee.optim.XQueryExpressionEE.<init>(XQueryExpressionEE.java:54)
	at com.saxonica.config.EnterpriseConfiguration.makeXQueryExpression(EnterpriseConfiguration.java:2051)
	at net.sf.saxon.query.XQueryParser.makeXQueryExpression(XQueryParser.java:193)
	at net.sf.saxon.query.StaticQueryContext.compileQuery(StaticQueryContext.java:597)
	at net.sf.saxon.s9api.XQueryCompiler.compile(XQueryCompiler.java:536)
	at Saxon3483.run(Saxon3483.java:71)
	at java.lang.Thread.run(Thread.java:748)

This is reproducible with the test program that is attached to #3483 within a few test cycles, however the exception handling in its run method must be modified in order to avoid NPEs, e.g.:

	public void run() {
		try {
			getXQueryCompiler().compile(QUERY);
		}
		catch (Exception e) {
			synchronized (printLock) {
				e.printStackTrace(System.err);
				System.err.println("total number of test cycles: " + testCycle);
				System.exit(1);
			}
		}
	}

Tested with Saxon-EE 9.9.1.5.

Please register to edit this issue

Also available in: Atom PDF