osaf/services/saf/amf/amfd/imm.cc  |  4 ++++
 osaf/services/saf/amf/amfd/main.cc |  2 +-
 2 files changed, 5 insertions(+), 1 deletions(-)


V3:incoporates suggestions given by Minh and Gary.

When AMFD receives BAD_HANDLE from IMM, it calls avd_imm_reinit_bg()
to init with IMM in a separate thread. This thread will try to finalize
with IMM. When thread is executing, main thread may do some IMM activity
on this unfinalized BAD_HANDLE.
This patch will restore the code in main thread that finalizes IMM handle
beofore spawning thread for initialization.

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
@@ -1974,6 +1974,10 @@ void avd_imm_reinit_bg(void)
 
        osaf_mutex_lock_ordie(&imm_reinit_thread_startup_mutex);
 
+       (void) saImmOiFinalize(avd_cb->immOiHandle);
+       avd_cb->immOiHandle = 0;
+       avd_cb->is_implementer = false;
+
        pthread_attr_init(&attr);
        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
 
diff --git a/osaf/services/saf/amf/amfd/main.cc 
b/osaf/services/saf/amf/amfd/main.cc
--- a/osaf/services/saf/amf/amfd/main.cc
+++ b/osaf/services/saf/amf/amfd/main.cc
@@ -646,7 +646,7 @@ static void main_loop(void)
                        fds[FD_CLM].events = POLLIN;
                }
        
-               if (cb->immOiHandle != 0) {
+               if ((cb->immOiHandle != 0) && (cb->avd_imm_status == 
AVD_IMM_INIT_DONE)) {
                        fds[FD_IMM].fd = cb->imm_sel_obj;
                        fds[FD_IMM].events = POLLIN;
                        nfds = FD_IMM + 1;

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

Reply via email to