Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Done
    • Affects Version/s: 2.2.10-fuse-00-00, 2.2.11-fuse-00-00, 2.3.1-fuse-01-00 , 2.3.2-fuse-00-00, 2.3.3-fuse-00-00
    • Component/s: None
    • Labels:
      None

      Description

      JMSContinuation contains this method:

      protected void createTimerTask(long timeout) {
              timer = new Timer();
              timer.schedule(new TimerTask() {
                  public void run() {
                      synchronized (JMSContinuation.this) { 
                          if (isPending) {
                              doResume();
                          }
                      }
                  }
              }, timeout);
          }

      The 'if' statement should be changed to:

      if (isPending) {
                  cancelTimerTask();
                  doResume();
      }

      The current impl causes cancel() not to be called on the Timer instance if timeout is triggered. This causes threads created by Timer instances to be leaked.

      Please note: as stated above - the leak is only observable when timeouts are triggered on these continuations. If no timeouts are triggered and the orginary resume() method is called, this class does nto leak threads.

        Gliffy Diagrams

          Attachments

            Activity

              People

              • Assignee:
                willem.jiang Willem Jiang
                Reporter:
                willem.jiang Willem Jiang
              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: