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();
+ }
}
// ///////////////////////