---
 src/log/logd/lgs_stream.cc | 44 +++++++++++++++++++++++++++++++-------------
 1 file changed, 31 insertions(+), 13 deletions(-)

diff --git a/src/log/logd/lgs_stream.cc b/src/log/logd/lgs_stream.cc
index 65689d6..4f7c3f8 100644
--- a/src/log/logd/lgs_stream.cc
+++ b/src/log/logd/lgs_stream.cc
@@ -623,19 +623,37 @@ SaAisErrorT lgs_create_rt_appstream(log_stream_t *const 
stream) {
         NULL};
 
     {
-      /**
-       * Have to have retry for Rt creation.
-       * Rt update could consider removing retry to avoid blocking
-       */
-      rc = immutil_saImmOiRtObjectCreate_2(
-          lgs_cb->immOiHandle, const_cast<SaImmClassNameT>("SaLogStream"),
-          parentName, attrValues);
-      free(dndup);
-
-      if (rc != SA_AIS_OK) {
-        LOG_WA("saImmOiRtObjectCreate_2 returned %u for %s, parent %s", rc,
-               stream->name.c_str(), parent_name);
-      }
+        uint16_t count = 0;
+        rc = immutil_saImmOiRtObjectCreate_2(
+            lgs_cb->immOiHandle, const_cast<SaImmClassNameT>("SaLogStream"),
+            parentName, attrValues);
+
+        while (((rc == SA_AIS_ERR_TIMEOUT) || (rc == SA_AIS_ERR_BAD_HANDLE))
+               && (count < 10)) {
+            LOG_WA(
+                "immutil_saImmOiRtObjectCreate_2 returned %u for %s, parent 
%s",
+                rc, stream->name.c_str(), parent_name);
+
+            if ( rc == SA_AIS_ERR_BAD_HANDLE ) {
+                saImmOiFinalize(lgs_cb->immOiHandle);
+                lgs_cb->immOiHandle = 0;
+                lgs_cb->immSelectionObject = -1;
+                /* Initiate IMM reinitializtion */
+                lgs_imm_impl_reinit_nonblocking(lgs_cb);
+            }
+            count++;
+            osaf_nanosleep(&kHundredMilliseconds);
+            rc = immutil_saImmOiRtObjectCreate_2(
+            lgs_cb->immOiHandle, const_cast<SaImmClassNameT>("SaLogStream"),
+            parentName, attrValues);
+        }
+        free(dndup);
+
+        if (rc != SA_AIS_OK) {
+            LOG_WA(
+               "saImmOiRtObjectCreate_2 returned %u for %s, parent %s",
+               rc, stream->name.c_str(), parent_name);
+        }
     }
   }
 
-- 
2.7.4


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to