osaf/services/saf/amf/amfd/ntf.cc |  17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)


Notifications are pused in job queue (fixed in ticket #314).
During switchover, active controller will empty the job queue.
Since notifications allocate memory it needs to be freed.

diff --git a/osaf/services/saf/amf/amfd/ntf.cc 
b/osaf/services/saf/amf/amfd/ntf.cc
--- a/osaf/services/saf/amf/amfd/ntf.cc
+++ b/osaf/services/saf/amf/amfd/ntf.cc
@@ -546,14 +546,12 @@ SaAisErrorT avd_try_send_notification(Nt
   SaNtfNotificationsT *myntf = &job->myntf;
   SaAisErrorT rc = SA_AIS_OK;  
   SaNtfNotificationHeaderT *header = nullptr;
-  SaNtfNotificationHandleT notificationHandle = 0;
+  SaNtfNotificationHandleT &notificationHandle = 
myntf->notification.stateChangeNotification.notificationHandle;
 
   if (myntf->notificationType == SA_NTF_TYPE_STATE_CHANGE) {
     header = &myntf->notification.stateChangeNotification.notificationHeader;
-    notificationHandle = 
myntf->notification.stateChangeNotification.notificationHandle;
   } else if (myntf->notificationType == SA_NTF_TYPE_ALARM) { 
     header = &myntf->notification.alarmNotification.notificationHeader;
-    notificationHandle = 
myntf->notification.alarmNotification.notificationHandle;
   }
 
   //Try to send the notification if not sent.
@@ -573,6 +571,8 @@ SaAisErrorT avd_try_send_notification(Nt
   rc = saNtfNotificationFree(notificationHandle);
   if ((rc == SA_AIS_ERR_TRY_AGAIN) || (rc == SA_AIS_ERR_TIMEOUT)) {
     TRACE("Notification Free unsuccesful TRY_AGAIN or TIMEOUT rc:%u", rc);
+  } else {
+       notificationHandle = 0;
   }
 
 done:
@@ -887,4 +887,15 @@ AvdJobDequeueResultT NtfSend::exec(const
 }
 
 NtfSend::~NtfSend() {
+  SaAisErrorT rc = SA_AIS_OK;
+  if (myntf.notificationType == SA_NTF_TYPE_STATE_CHANGE) {
+    if (myntf.notification.stateChangeNotification.notificationHandle != 0)
+      rc = 
saNtfNotificationFree(myntf.notification.stateChangeNotification.notificationHandle);
+  } else if (myntf.notificationType == SA_NTF_TYPE_ALARM) {
+    if (myntf.notification.alarmNotification.notificationHandle != 0)
+      rc = 
saNtfNotificationFree(myntf.notification.alarmNotification.notificationHandle);
+  }
+  if (rc != SA_AIS_OK) {
+    TRACE("Notification Free failed rc:%u", rc);
+  }
 }

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to