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
-
Fix Version/s: 2.2.12-fuse-00-00, 2.3.3-fuse-01-15
-
Component/s: None
-
Labels:None
-
External Issue URL:
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.