void osm_transaction_mgr_destroy(IN osm_vendor_t * const p_vend) { osm_transaction_mgr_t *trans_mgr_p; cl_list_item_t *p_list_item; cl_map_item_t *p_map_item; osm_madw_req_t *osm_madw_req_p; OSM_LOG_ENTER(p_vend->p_log); trans_mgr_p = (osm_transaction_mgr_t *) p_vend->p_transaction_mgr; if (p_vend->p_transaction_mgr != NULL) { /* we need to get a lock */ cl_spinlock_acquire(&trans_mgr_p->transaction_mgr_lock); /* go over all the items in the list and remove them */ p_list_item = cl_qlist_remove_head(trans_mgr_p->madw_reqs_list_p); while (p_list_item != cl_qlist_end(trans_mgr_p->madw_reqs_list_p)) { osm_madw_req_p = (osm_madw_req_t *) p_list_item; if (osm_madw_req_p->p_madw->p_mad) osm_log(p_vend->p_log, OSM_LOG_DEBUG, "osm_transaction_mgr_destroy: " "Found outstanding MADW:%p TID:<0x%" PRIx64 ">.\n", osm_madw_req_p->p_madw, osm_madw_req_p->p_madw->p_mad-> trans_id); else osm_log(p_vend->p_log, OSM_LOG_DEBUG, "osm_transaction_mgr_destroy: " "Found outstanding MADW:%p TID:UNDEFINED.\n", osm_madw_req_p->p_madw); /* each item - remove it from the map */ p_map_item = &(osm_madw_req_p->map_item); cl_qmap_remove_item(trans_mgr_p->madw_by_tid_map_p, p_map_item); /* free the item */ free(osm_madw_req_p); p_list_item = cl_qlist_remove_head(trans_mgr_p->madw_reqs_list_p); } /* free the qlist and qmap */ free(trans_mgr_p->madw_reqs_list_p); free(trans_mgr_p->madw_by_tid_map_p); /* reliease and destroy the lock */ cl_spinlock_release(&trans_mgr_p->transaction_mgr_lock); cl_spinlock_destroy(&(trans_mgr_p->transaction_mgr_lock)); /* destroy the timer */ cl_timer_trim(&trans_mgr_p->madw_list_timer, 1); cl_timer_destroy(&trans_mgr_p->madw_list_timer); /* free the transaction_manager object */ free(trans_mgr_p); trans_mgr_p = NULL; } OSM_LOG_EXIT(p_vend->p_log); }
void osm_sa_destroy(IN osm_sa_t * p_sa) { OSM_LOG_ENTER(p_sa->p_log); p_sa->state = OSM_SA_STATE_INIT; cl_timer_destroy(&p_sa->sr_timer); OSM_LOG_EXIT(p_sa->p_log); }
void osm_vendor_unbind(IN osm_bind_handle_t h_bind) { mad_bind_info_t *p_mad_bind_info; umadt_obj_t *p_umadt_obj; cl_list_item_t *p_list_item, *p_next_list_item; CL_ASSERT(h_bind); p_mad_bind_info = (mad_bind_info_t *) h_bind; p_umadt_obj = p_mad_bind_info->p_umadt_obj; /* sanity check */ CL_ASSERT(p_umadt_obj); CL_ASSERT(p_umadt_obj->init_done); CL_ASSERT(__valid_mad_handle(p_mad_bind_info)); p_umadt_obj->uMadtInterface.uMadtDestroy(&p_mad_bind_info-> umadt_handle); cl_timer_destroy(&p_mad_bind_info->timeout_timer); cl_thread_destroy(&p_mad_bind_info->recv_processor_thread); cl_spinlock_acquire(&p_mad_bind_info->trans_ctxt_lock); p_list_item = cl_qlist_head(&p_mad_bind_info->trans_ctxt_list); while (p_list_item != cl_qlist_end(&p_mad_bind_info->trans_ctxt_list)) { p_next_list_item = cl_qlist_next(p_list_item); cl_qlist_remove_item(&p_mad_bind_info->trans_ctxt_list, p_list_item); free(p_list_item); p_list_item = p_next_list_item; } cl_spinlock_release(&p_mad_bind_info->trans_ctxt_lock); cl_spinlock_acquire(&p_mad_bind_info->timeout_list_lock); p_list_item = cl_qlist_head(&p_mad_bind_info->timeout_list); while (p_list_item != cl_qlist_end(&p_mad_bind_info->timeout_list)) { p_next_list_item = cl_qlist_next(p_list_item); cl_qlist_remove_item(&p_mad_bind_info->timeout_list, p_list_item); free(p_list_item); p_list_item = p_next_list_item; } cl_spinlock_release(&p_mad_bind_info->timeout_list_lock); free(p_mad_bind_info); }
void cl_event_wheel_destroy(IN cl_event_wheel_t * const p_event_wheel) { cl_list_item_t *p_list_item; cl_map_item_t *p_map_item; cl_event_wheel_reg_info_t *p_event; /* we need to get a lock */ cl_spinlock_acquire(&p_event_wheel->lock); cl_event_wheel_dump(p_event_wheel); /* go over all the items in the list and remove them */ p_list_item = cl_qlist_remove_head(&p_event_wheel->events_wheel); while (p_list_item != cl_qlist_end(&p_event_wheel->events_wheel)) { p_event = PARENT_STRUCT(p_list_item, cl_event_wheel_reg_info_t, list_item); CL_DBG("cl_event_wheel_destroy: Found outstanding event" " key:<0x%" PRIx64 ">\n", p_event->key); /* remove it from the map */ p_map_item = &(p_event->map_item); cl_qmap_remove_item(&p_event_wheel->events_map, p_map_item); free(p_event); /* allocated by cl_event_wheel_reg */ p_list_item = cl_qlist_remove_head(&p_event_wheel->events_wheel); } /* destroy the timer */ cl_timer_destroy(&p_event_wheel->timer); /* destroy the lock (this should be done without releasing - we don't want any other run to grab the lock at this point. */ cl_spinlock_release(&p_event_wheel->lock); cl_spinlock_destroy(&(p_event_wheel->lock)); }