@@ -257,9 +257,6 @@ static void drop_mgr_remove_port(osm_sm_t * sm, IN osm_port_t * p_port)
OSM_LOG(sm->p_log, OSM_LOG_VERBOSE,
"Cleaned SM for port guid 0x%016" PRIx64 "\n",
cl_ntoh64(port_guid));
- /* clean up the polling_sm_guid */
- if (sm->polling_sm_guid == p_sm->smi.guid)
- sm->polling_sm_guid = 0;
free(p_sm);
}
@@ -1404,10 +1404,17 @@ repeat_discovery:
* need to wait for that SM to relinquish control
* of its portion of the subnet. C14-60.2.1.
* Also - need to start polling on that SM. */
+ CL_PLOCK_EXCL_ACQUIRE(sm->p_lock);
sm->polling_sm_guid = p_remote_sm->smi.guid;
+ CL_PLOCK_RELEASE(sm->p_lock);
osm_sm_state_mgr_process(sm,
OSM_SM_SIGNAL_WAIT_FOR_HANDOVER);
return;
+ } else if (sm->polling_sm_guid) {
+ /* Stop polling SM if it's not found */
+ osm_sm_state_mgr_process(sm,
+ OSM_SM_SIGNAL_POLLING_TIMEOUT);
+ return;
}
}
}