Velocity
  1. Velocity
  2. VELOCITY-566

EmptyStackException when rendering macros simultaneously

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.6
    • Fix Version/s: 1.6
    • Component/s: Engine
    • Labels:
      None

      Description

      When two threads are running VelocimacroFactory.startRenderingMacro() simultaneously (same template), both check that templateMap is empty, then both create a new stack, then the second thread put it in templateMap, replacing the one added by the first thread.

      At this time we got a stack which size == 1 instead of 2.

      Then both threads endProcessingMacros(), both get stack from templateMap and check that its size is > 0, first one empty stack then second pop() macro and gets an EmptyStackException.

      behavior was introduced by improvement VELOCITY-297.

      patch is joined, synchronize(templateMap) in VelocimacroFactory.startRenderingMacro().

        Activity

        Mark Thomas made changes -
        Workflow Default workflow, editable Closed status [ 12551525 ] jira [ 12552412 ]
        Mark Thomas made changes -
        Workflow jira [ 12414679 ] Default workflow, editable Closed status [ 12551525 ]
        Etienne Massip made changes -
        Status Resolved [ 5 ] Closed [ 6 ]
        Will Glass-Husain made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]
        Etienne Massip made changes -
        Field Original Value New Value
        Attachment emptyStackExceptionMacrosVTL.patch [ 12367459 ]
        Etienne Massip created issue -

          People

          • Assignee:
            Unassigned
            Reporter:
            Etienne Massip
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development