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