You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by zo...@apache.org on 2004/02/11 21:43:48 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/extensions ExtensionHandlerExsltFunction.java
zongaro 2004/02/11 12:43:48
Modified: java/src/org/apache/xalan/extensions
ExtensionHandlerExsltFunction.java
Log:
Fix for bugzilla bug report 24302.
Fields in the object representing an EXSLT function element (ElemExsltFunction)
were being used to store execution state information for references to that
function. That caused problems with multi-threaded code that used Transformer
objects created from the same Templates object - each Transformer shares the
same instances of ElemExsltFunction.
The fix was to replace the fields ElemExsltFunction.m_result and
ElemExsltFunction.m_isResultSet with a new ObjectStack field in TransformerImpl
named m_currentFuncResult.
Also, the ElemExsltFunction.setCallerFrameSize method has been removed, so the
references to that function were dropped. The ElemExsltFunction.execute method
is now responsible for managing the variable stack on its own.
Reviewed by Morris Kwan (mkwan () ca!ibm!com)
Revision Changes Path
1.8 +7 -18 xml-xalan/java/src/org/apache/xalan/extensions/ExtensionHandlerExsltFunction.java
Index: ExtensionHandlerExsltFunction.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/extensions/ExtensionHandlerExsltFunction.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ExtensionHandlerExsltFunction.java 11 Feb 2004 05:26:23 -0000 1.7
+++ ExtensionHandlerExsltFunction.java 11 Feb 2004 20:43:48 -0000 1.8
@@ -202,24 +202,13 @@
if (null != elemFunc) {
XPathContext context = exprContext.getXPathContext();
TransformerImpl transformer = (TransformerImpl)context.getOwnerObject();
-
- // Reset the frame bottom before calling the EXSLT function.
- if (callerTemplate != null)
- elemFunc.setCallerFrameSize(callerTemplate.m_frameSize);
- else
- elemFunc.setCallerFrameSize(0);
-
+ transformer.pushCurrentFuncResult(null);
+
elemFunc.execute(transformer, methodArgs);
-
- XObject val = new XString(""); // value returned if no result element.
- if (elemFunc.isResultSet())
- {
- val = elemFunc.getResult();
- elemFunc.clearResult();
- }
-
- return val;
-
+
+ XObject val = (XObject)transformer.popCurrentFuncResult();
+ return (val == null) ? new XString("") // value if no result element.
+ : val;
}
else {
throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_FUNCTION_NOT_FOUND, new Object[] {extFunction.getFunctionName()}));
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org