Multi-threading problem with AVTs
---------------------------------
Key: XALANJ-2321
URL: http://issues.apache.org/jira/browse/XALANJ-2321
Project: XalanJ2
Issue Type: Bug
Components: Xalan
Affects Versions: 2.6, 2.7
Environment: multi-processor systems
Reporter: Erin Harris
The following code in AVT.java is causing problems for multi-threaded test
cases:
private final FastStringBuffer getBuffer(){
if(USE_OBJECT_POOL){
return StringBufferPool.get();
}else if(m_cachedBuf == null){
m_cachedBuf = new FastStringBuffer(INIT_BUFFER_CHUNK_BITS);
return m_cachedBuf;
}else if(m_cachedBuf.length() != 0){
return new FastStringBuffer(INIT_BUFFER_CHUNK_BITS);
}else{
return m_cachedBuf;
}
}
Because the same object node for the AVT is used by each thread, sometimes on
one thread the buffer would be empty just as another thread is writing to it
and thus both threads would write to the same buffer. This caused problems for
a customer that used <xsl:element name="{local-name()}"> a lot and were
running on a multi-processor machine.
The suggested fix is to change the code to the following, and remove the
m_cachedBuf field:
private final FastStringBuffer getBuffer(){
if(USE_OBJECT_POOL){
return StringBufferPool.get();
}else{
return new FastStringBuffer(INIT_BUFFER_CHUNK_BITS);
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]