Uploaded image for project: 'Struts 2'
  1. Struts 2
  2. WW-5289

Execute and Wait Interceptor prevents JVM shutdown

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 6.1.1
    • 6.2.0
    • Core Interceptors
    • None

    Description

      Hi Struts 2 team,

      We are using the Execute and Wait Interceptor as following:

      <action name="longRunLaunch"
      class="my.sample.longrun.action.LongRunAction"
      method="longRunLaunch">
      <interceptor-ref name="myStack"/>
      <interceptor-ref name="execAndWait">
      <param name="delay">500</param>
      <param name="delaySleepInterval">500</param>
      </interceptor-ref>
      <result name="wait">/my/sample/wait.jsp</result>
      <result name="success">/my/sample/success.jsp</result>
      </action>

      • with Struts 6.0.3, it works fine
      • with Struts 6.1.1, it works fine... but JVM shutdown is hanging

      We are running: Apache Tomcat (TomEE)/9.0.41 (8.0.6)

      I tried to compare thread dumps and only found this extra one with Struts 6.1.1:

      "pool-5-thread-1" #129 prio=5 os_prio=0 cpu=0.00ms elapsed=21.47s tid=0x000001b39a917800 nid=0x3cb0 waiting on condition [0x00000068c4fff000]
      java.lang.Thread.State: WAITING (parking)
      at jdk.internal.misc.Unsafe.park(java.base@11.0.10/Native Method)

      • parking to wait for <0x00000000e4ca75b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.park(java.base@11.0.10/LockSupport.java:194)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@11.0.10/AbstractQueuedSynchronizer.java:2081)
        at java.util.concurrent.LinkedBlockingQueue.take(java.base@11.0.10/LinkedBlockingQueue.java:433)
        at java.util.concurrent.ThreadPoolExecutor.getTask(java.base@11.0.10/ThreadPoolExecutor.java:1054)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@11.0.10/ThreadPoolExecutor.java:1114)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@11.0.10/ThreadPoolExecutor.java:628)
        at java.lang.Thread.run(java.base@11.0.10/Thread.java:834)

      Locked ownable synchronizers:

      • None

      Regards,
      Jean.

      Attachments

        Activity

          People

            Unassigned Unassigned
            jeanjean KON-SUN-TACK
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 50m
                50m