osaf/services/saf/amf/amfd/imm.cc        |  22 ++++++++++++++++++++++
 osaf/services/saf/amf/amfd/include/imm.h |   2 ++
 osaf/services/saf/amf/amfd/role.cc       |   5 +++++
 3 files changed, 29 insertions(+), 0 deletions(-)


diff --git a/osaf/services/saf/amf/amfd/imm.cc 
b/osaf/services/saf/amf/amfd/imm.cc
--- a/osaf/services/saf/amf/amfd/imm.cc
+++ b/osaf/services/saf/amf/amfd/imm.cc
@@ -423,6 +423,28 @@ AvdJobDequeueResultT Fifo::execute(const
        return ret;
 }
 
+AvdJobDequeueResultT Fifo::executeAdminResp(const AVD_CL_CB *cb)
+{
+       Job *ajob;
+       AvdJobDequeueResultT ret = JOB_EXECUTED;
+
+       TRACE_ENTER();
+
+       while ((ajob = peek()) != nullptr) {
+               if (dynamic_cast<ImmAdminResponse *>(ajob) != nullptr) {
+                       ret = ajob->exec(cb);
+               } else {
+                       ajob = dequeue();
+                       delete ajob;
+                       ret = JOB_EXECUTED;
+               }
+       }
+
+       TRACE_LEAVE2("%d", ret);
+
+       return ret;
+}
+
 //
 void Fifo::empty()
 {
diff --git a/osaf/services/saf/amf/amfd/include/imm.h 
b/osaf/services/saf/amf/amfd/include/imm.h
--- a/osaf/services/saf/amf/amfd/include/imm.h
+++ b/osaf/services/saf/amf/amfd/include/imm.h
@@ -146,6 +146,8 @@ public:
     
         static AvdJobDequeueResultT execute(const AVD_CL_CB *cb);
 
+        static AvdJobDequeueResultT executeAdminResp(const AVD_CL_CB *cb);
+
         static void empty();
     
        static uint32_t size();
diff --git a/osaf/services/saf/amf/amfd/role.cc 
b/osaf/services/saf/amf/amfd/role.cc
--- a/osaf/services/saf/amf/amfd/role.cc
+++ b/osaf/services/saf/amf/amfd/role.cc
@@ -766,6 +766,11 @@ void avd_mds_qsd_role_evh(AVD_CL_CB *cb,
        }
 
 try_again:
+       /* Execute admin op jobs before calling saImmOiImplementerClear to avoid
+        * SA_AIS_ERR_TIMEOUT
+        */
+       Fifo::executeAdminResp(cb);
+
        /* Take mutex here to sync with imm reinit thread.*/
        osaf_mutex_lock_ordie(&imm_reinit_mutex);
        /* Give up IMM OI implementer role */

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to