Status: New
Owner: ----
Labels: Priority-Medium
New issue 21 by [email protected]: Retransmission alert memory leak
http://code.google.com/p/jain-sip/issues/detail?id=21
What steps will reproduce the problem?
1. make a call and enableRetransmissionAlerts for INVITE
2. on ACK disableRetransmissionAlerts (don't think this is really necessary
as I think the JAIN SIP Stack does this itself)
3. terminate the call
What is the expected output? What do you see instead?
The SIPServerTransaction should be cleaned up after all timers have
expired, however, a reference remains in
sipStack.retransmissionAlertTransactions
What version of the product are you using? On what operating system?
latest snapshot (1.2.2169)
Please provide any additional information below.
Problem is that the constructor of RetransmissionAlertTimerTask never
assigns the dialogId:
public RetransmissionAlertTimerTask(String dialogId) {
this.ticks = SIPTransaction.T1;
this.ticksLeft = this.ticks;
}
RetransmissionAlertTimerTask.dialogId is never assigned anywhere. When
alerts are disabled the check for dialogId is false and the transaction
never gets cleaned up:
public void disableRetransmissionAlerts() {
if (this.retransmissionAlertTimerTask != null &&
this.retransmissionAlertEnabled) {
sipStack.getTimer().cancel(retransmissionAlertTimerTask);
this.retransmissionAlertEnabled = false;
String dialogId = this.retransmissionAlertTimerTask.dialogId;
if (dialogId != null) {
sipStack.retransmissionAlertTransactions.remove(dialogId);
}
this.retransmissionAlertTimerTask = null;
}
}
I have attached a file with the fixed constructor.
regards, Mitchell Ackerman ([email protected])
Attachments:
SIPServerTransaction.java 91.2 KB