[
https://issues.apache.org/jira/browse/VELOCITY-536?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12486066
]
Christopher Schultz commented on VELOCITY-536:
----------------------------------------------
"Even though those instructions may be re-ordered, they should both be
completed before another thread enters the block. So their order doesn't
matter."
Since "init" is being checked before the synchronized block, the ordering of
the "init=true" is certainly relevant. If the VM or JIT sets init=true before
constructing the object, the other thread is hosed because it skips the
synchronized block entirely and gets a reference that is potentially invalid.
JSR-133 has addressed re-orderings with respect to volatile members, and I'm
not sure I fully understand why this fixes DCL, but, as Nathan points out, we
cannot assume Java 1.5 availability, so we should avoid DCL at least for now.
> 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
> 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]