Revision: 6aa7a3355735
Author:   [email protected] <[email protected]>
Date:     Mon Jan 21 03:21:54 2013
Log: Issue 17: MAP RA, Dialog never released if TIMEOUT event is filtered
http://code.google.com/p/jain-slee/source/detail?r=6aa7a3355735&repo=ss7

Modified:
/resources/map/ra/src/main/java/org/mobicents/slee/resource/map/MAPResourceAdaptor.java

=======================================
--- /resources/map/ra/src/main/java/org/mobicents/slee/resource/map/MAPResourceAdaptor.java Sat Jan 5 01:57:11 2013 +++ /resources/map/ra/src/main/java/org/mobicents/slee/resource/map/MAPResourceAdaptor.java Mon Jan 21 03:21:54 2013
@@ -522,9 +522,15 @@
        }

        /**
-        * Private methods
+        * Filters the even and returns true if the event was fired
+        *
+        * @param eventName
+        * @param handle
+        * @param event
+        * @param flags
+        * @return
         */
- private void fireEvent(String eventName, ActivityHandle handle, Object event, int flags) { + private boolean fireEvent(String eventName, ActivityHandle handle, Object event, int flags) {

FireableEventType eventID = eventIdCache.getEventId(this.resourceAdaptorContext.getEventLookupFacility(),
                                eventName);
@@ -533,6 +539,7 @@
                        if (tracer.isFineEnabled()) {
tracer.fine("Event " + (eventID == null ? "null" : eventID.getEventType()) + " filtered");
                        }
+                       return false;
                } else {

                        try {
@@ -550,6 +557,7 @@
                        } catch (FireEventException e) {
                                this.tracer.severe("Error while firing event", 
e);
                        }
+                       return true;
                }
        }

@@ -753,18 +761,32 @@
this.tracer.fine(String.format("Rx : onDialogTimeout for DialogId=%d", mapDialog.getLocalDialogId()));
                }

-// MAPDialogWrapper mapDialogWrapper = (MAPDialogWrapper) mapDialog.getUserObject();
-//             DialogTimeout dt = new DialogTimeout(mapDialogWrapper);
-//             onEvent(dt.getEventTypeName(), mapDialogWrapper, dt);
+               mapDialog.keepAlive();

-
-               mapDialog.keepAlive();
-
MAPDialogWrapper mapDialogWrapper = (MAPDialogWrapper) mapDialog.getUserObject();
-               mapDialogWrapper.startDialogTimeoutProc();
                DialogTimeout dt = new DialogTimeout(mapDialogWrapper);
-               onEvent(dt.getEventTypeName(), mapDialogWrapper, dt,
+
+               if (mapDialogWrapper == null) {
+                       this.tracer
+ .severe(String.format("Firing %s but MAPDialogWrapper userObject is null", dt.getEventTypeName()));
+                       mapDialog.release();
+                       return;
+               }
+
+               mapDialogWrapper.startDialogTimeoutProc();
+
+               if (this.tracer.isFineEnabled()) {
+ this.tracer.fine(String.format("Firing %s for DialogId=%d", dt.getEventTypeName(), mapDialogWrapper
+                                       
.getWrappedDialog().getLocalDialogId()));
+               }
+
+ boolean fired = fireEvent(dt.getEventTypeName(), mapDialogWrapper.getActivityHandle(), dt, (EventFlags.REQUEST_PROCESSING_SUCCESSFUL_CALLBACK | EventFlags.REQUEST_PROCESSING_FAILED_CALLBACK));
+
+               if (!fired) {
+                       // If event filtered out, lets release Dialog
+                       mapDialogWrapper.release();
+               }
        }

        // ///////////////////////

Reply via email to