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