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

Reply via email to