/********************************************************************** * Return a MAD by providing it's wrapper object. **********************************************************************/ void osm_vendor_put(IN osm_bind_handle_t h_bind, IN osm_vend_wrap_t * const p_vw) { osm_ts_bind_info_t *p_bind = (osm_ts_bind_info_t *) h_bind; osm_vendor_t *p_vend = p_bind->p_vend; osm_madw_t *p_madw; OSM_LOG_ENTER(p_vend->p_log); CL_ASSERT(p_vw); CL_ASSERT(p_vw->p_mad_buf); if (osm_log_get_level(p_vend->p_log) >= OSM_LOG_DEBUG) { osm_log(p_vend->p_log, OSM_LOG_DEBUG, "osm_vendor_put: " "Retiring MAD %p.\n", p_vw->p_mad_buf); } /* * We moved the removal of the transaction to immediatly after * it was looked up. */ /* free the mad but the wrapper is part of the madw object */ free(p_vw->p_mad_buf); p_vw->p_mad_buf = NULL; p_madw = PARENT_STRUCT(p_vw, osm_madw_t, vend_wrap); p_madw->p_mad = NULL; OSM_LOG_EXIT(p_vend->p_log); }
void osm_vendor_put(IN osm_bind_handle_t h_bind, IN osm_vend_wrap_t * const p_vw) { osm_al_bind_info_t *p_bind = (osm_al_bind_info_t *) h_bind; osm_vendor_t *p_vend = p_bind->p_vend; ib_api_status_t status; OSM_LOG_ENTER(p_vend->p_log); CL_ASSERT(p_vw); CL_ASSERT(p_vw->p_elem); CL_ASSERT(p_vw->h_bind == h_bind); if (osm_log_get_level(p_vend->p_log) >= OSM_LOG_DEBUG) { osm_log(p_vend->p_log, OSM_LOG_DEBUG, "osm_vendor_put: " "Retiring MAD %p.\n", ib_get_mad_buf(p_vw->p_elem)); } status = ib_put_mad(p_vw->p_elem); if (status != IB_SUCCESS) { osm_log(p_vend->p_log, OSM_LOG_ERROR, "osm_vendor_put: ERR 3B26: " "Unable to retire MAD (%s).\n", ib_get_err_str(status)); } OSM_LOG_EXIT(p_vend->p_log); }
void osm_vendor_put(IN osm_bind_handle_t h_bind, IN osm_vend_wrap_t * const p_vw) { osmv_bind_obj_t *p_bo = (osmv_bind_obj_t *) h_bind; osm_vendor_t const *p_vend = p_bo->p_vendor; if (p_bo->is_closing != TRUE) { OSM_LOG_ENTER(p_vend->p_log); CL_ASSERT(p_vw); CL_ASSERT(p_vw->p_mad); if (osm_log_get_level(p_vend->p_log) >= OSM_LOG_DEBUG) { osm_log(p_vend->p_log, OSM_LOG_DEBUG, "osm_vendor_put: " "Retiring MAD %p.\n", p_vw->p_mad); } free(p_vw->p_mad); p_vw->p_mad = NULL; OSM_LOG_EXIT(p_vend->p_log); } }
ib_mad_t *osm_vendor_get(IN osm_bind_handle_t h_bind, IN const uint32_t mad_size, IN osm_vend_wrap_t * const p_vw) { ib_mad_t *p_mad; osm_al_bind_info_t *p_bind = (osm_al_bind_info_t *) h_bind; osm_vendor_t *p_vend = p_bind->p_vend; ib_api_status_t status; OSM_LOG_ENTER(p_vend->p_log); CL_ASSERT(p_vw); p_vw->size = mad_size; p_vw->h_bind = h_bind; /* Retrieve a MAD element from the pool and give the user direct access to its buffer. */ status = ib_get_mad(p_bind->pool_key, mad_size, &p_vw->p_elem); if (status != IB_SUCCESS) { osm_log(p_vend->p_log, OSM_LOG_ERROR, "osm_vendor_get: ERR 3B25: " "Unable to acquire MAD (%s).\n", ib_get_err_str(status)); p_mad = NULL; goto Exit; } CL_ASSERT(p_vw->p_elem); p_mad = ib_get_mad_buf(p_vw->p_elem); if (osm_log_get_level(p_vend->p_log) >= OSM_LOG_DEBUG) { osm_log(p_vend->p_log, OSM_LOG_DEBUG, "osm_vendor_get: " "Acquired MAD %p, size = %u.\n", p_mad, mad_size); } Exit: OSM_LOG_EXIT(p_vend->p_log); return (p_mad); }
ib_mad_t *osm_vendor_get(IN osm_bind_handle_t h_bind, IN const uint32_t mad_size, IN osm_vend_wrap_t * const p_vw) { ib_mad_t *p_mad; osmv_bind_obj_t *p_bo = (osmv_bind_obj_t *) h_bind; osm_vendor_t const *p_vend = p_bo->p_vendor; uint32_t act_mad_size; OSM_LOG_ENTER(p_vend->p_log); CL_ASSERT(p_vw); if (mad_size < MAD_BLOCK_SIZE) { /* Stupid, but the applications want that! */ act_mad_size = MAD_BLOCK_SIZE; } else { act_mad_size = mad_size; } /* allocate it */ p_mad = (ib_mad_t *) malloc(act_mad_size); if (p_mad == NULL) { osm_log(p_vend->p_log, OSM_LOG_ERROR, "osm_vendor_get: ERR 7309: " "Error Obtaining MAD buffer.\n"); goto Exit; } memset(p_mad, 0, act_mad_size); if (osm_log_get_level(p_vend->p_log) >= OSM_LOG_DEBUG) { osm_log(p_vend->p_log, OSM_LOG_DEBUG, "osm_vendor_get: " "Allocated MAD %p, size = %u.\n", p_mad, act_mad_size); } p_vw->p_mad = p_mad; Exit: OSM_LOG_EXIT(p_vend->p_log); return (p_mad); }
/********************************************************************** Get a mad from the lower level. The osm_vend_wrap_t is a wrapper used to connect the mad to the response. **********************************************************************/ ib_mad_t *osm_vendor_get(IN osm_bind_handle_t h_bind, IN const uint32_t mad_size, IN osm_vend_wrap_t * const p_vw) { ib_mad_t *p_mad; osm_ts_bind_info_t *p_bind = (osm_ts_bind_info_t *) h_bind; osm_vendor_t *p_vend = p_bind->p_vend; OSM_LOG_ENTER(p_vend->p_log); CL_ASSERT(p_vw); p_vw->size = mad_size; /* allocate it */ p_mad = (ib_mad_t *) malloc(p_vw->size); if (p_mad == NULL) { osm_log(p_vend->p_log, OSM_LOG_ERROR, "osm_vendor_get: ERR 5022: " "Error Obtaining MAD buffer.\n"); goto Exit; } memset(p_mad, 0, p_vw->size); /* track locally */ p_vw->p_mad_buf = p_mad; p_vw->h_bind = h_bind; p_vw->p_resp_madw = NULL; if (osm_log_get_level(p_vend->p_log) >= OSM_LOG_DEBUG) { osm_log(p_vend->p_log, OSM_LOG_DEBUG, "osm_vendor_get: " "Acquired MAD %p, size = %u.\n", p_mad, p_vw->size); } Exit: OSM_LOG_EXIT(p_vend->p_log); return (p_mad); }