Revision: 12474
Author: jean.deruelle
Date: Tue Jun 15 06:53:52 2010
Log: Fixes Issue 1493
http://code.google.com/p/mobicents/source/detail?r=12474

Modified:
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/dispatchers/MessageDispatcher.java /trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletMessageImpl.java

=======================================
--- /trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/dispatchers/MessageDispatcher.java Mon Mar 8 04:40:29 2010 +++ /trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/core/dispatchers/MessageDispatcher.java Tue Jun 15 06:53:52 2010
@@ -23,8 +23,10 @@

 import javax.servlet.Servlet;
 import javax.servlet.ServletException;
+import javax.sip.ObjectInUseException;
 import javax.sip.ServerTransaction;
 import javax.sip.SipProvider;
+import javax.sip.Transaction;
 import javax.sip.message.Request;
 import javax.sip.message.Response;

@@ -40,6 +42,7 @@
 import org.mobicents.servlet.sip.message.SipServletMessageImpl;
 import org.mobicents.servlet.sip.message.SipServletRequestImpl;
 import org.mobicents.servlet.sip.message.SipServletResponseImpl;
+import org.mobicents.servlet.sip.message.TransactionApplicationData;
 import org.mobicents.servlet.sip.security.SipSecurityUtils;
 import org.mobicents.servlet.sip.startup.SipContext;

@@ -256,6 +259,26 @@
                        }
                } else {
logger.error("no handler found for sip session " + session.getKey() + " and request " + request); + // Issue 1493 : under some race condition the transaction might not be added to the sip session + // and in this particular condition no response will be generated back to the UA (we don't want to since this + // can be a retransmission here) so the stack will hold the ref to the transaction, so terminating the transaction
+                       // if it is present and cleaning up all related data
+            Transaction transaction = request.getTransaction();
+            if(transaction != null) {
+ TransactionApplicationData tad = (TransactionApplicationData) transaction.getApplicationData();
+                if(tad != null) {
+                    tad.cleanUp();
+                }
+                transaction.setApplicationData(null);
+
+                try {
+                    transaction.terminate();
+                } catch (ObjectInUseException e) {
+ logger.error("transaction " + transaction.getBranchId() + " for request " + request + " couldn't be terminated");
+                }
+            }
+
+            request.setSipSession(null);
                }
        }

=======================================
--- /trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletMessageImpl.java Thu Jun 10 08:22:16 2010 +++ /trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletMessageImpl.java Tue Jun 15 06:53:52 2010
@@ -1012,7 +1012,11 @@
// See Issue 1294 http://code.google.com/p/mobicents/issues/detail?id=1294 // but it will not be persisted to avoid unecessary replication if the message is persisted
                this.sipSession = session;
-               this.sessionKey = session.getKey();
+        if (session != null){
+            this.sessionKey = session.getKey();
+        } else {
+            this.sessionKey = null;
+        }
        }

        /**

Reply via email to