[ 
https://issues.apache.org/jira/browse/VELOCITY-536?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12504115
 ] 

Will Glass-Husain commented on VELOCITY-536:
--------------------------------------------

Hi Lei,

Went back and looked at this issue.  I'd like to commit, but I think the 
double-checked locking won't work.

I think if we change code like 
 
if(!init)
    {
      synchronized(this)
      {
         if ( !init )
         {
             nodeTree.init( context, rsvc);
                 init = true;
        }
}               

to:

      synchronized(this)
      {
         if ( !init )
         {
             nodeTree.init( context, rsvc);
                 init = true;
        }

it'd be fine.  I'm really not worried about the performance hit of the 
synchronization. most things I've read says this isn't significant in modern 
JVM's.  

Seem reasonable?

> Velocity Engine throws NullPointer Exception when two people click on the 
> same page at the same time for the first time
> -----------------------------------------------------------------------------------------------------------------------
>
>                 Key: VELOCITY-536
>                 URL: https://issues.apache.org/jira/browse/VELOCITY-536
>             Project: Velocity
>          Issue Type: Bug
>          Components: Engine
>    Affects Versions: 1.5
>            Reporter: Lei Gu
>             Fix For: 1.6
>
>         Attachments: 536-patch.txt, ASTDirective.java, ASTSetDirective.java, 
> VelocimacroProxy.java
>
>
> Multi-thread concurrency issue
> During our concurrency testing, we observed NullPointer exceptions being 
> thrown when two people hit the same page at the same time for the first time. 
> Upon further investigation, it turns out that we need to synchronize the init 
> method on ASTDirective, ASTSetDirective, and render method on 
> ASTSetDirective, and VelocimacroProxy.
>  Basically, the problem is introduced as the following; when two threads 
> attempts to parse and render the same template at the same time. Thread1 
> finishes parsing first and proceeds to the render method call, while thread 2 
> is still busy parsing and will overwrite the existing parse tree that is 
> being used by thread 1 for rendering purpose. Thus under certainly condition 
> a NullPointer exception will be thrown. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to