本文整理汇总了C++中osm_log函数的典型用法代码示例。如果您正苦于以下问题:C++ osm_log函数的具体用法?C++ osm_log怎么用?C++ osm_log使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了osm_log函数的16个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: __osmv_dispatch_accept_seg
static ib_api_status_t
__osmv_dispatch_accept_seg(IN osm_bind_handle_t h_bind,
IN osmv_txn_ctx_t * p_txn, IN const ib_mad_t * p_mad)
{
ib_api_status_t ret = IB_SUCCESS;
uint32_t seg_num = cl_ntoh32(((ib_rmpp_mad_t *) p_mad)->seg_num);
osmv_rmpp_recv_ctx_t *p_recv_ctx = osmv_txn_get_rmpp_recv_ctx(p_txn);
osmv_bind_obj_t *p_bo = (osmv_bind_obj_t *) h_bind;
uint64_t tid = osmv_txn_get_tid(p_txn);
OSM_LOG_ENTER(p_bo->p_vendor->p_log);
if (seg_num != p_recv_ctx->expected_seg) {
osm_log(p_bo->p_vendor->p_log, OSM_LOG_DEBUG,
"TID 0x%" PRIx64 ": can't accept this segment (%d) - "
"this is a Go-Back-N implementation\n", tid, seg_num);
return IB_INSUFFICIENT_RESOURCES;
}
/* Store the packet's copy in the reassembly list.
* Promote the expected segment counter.
*/
ret = osmv_rmpp_recv_ctx_store_mad_seg(p_recv_ctx, (uint8_t *) p_mad);
if (IB_SUCCESS != ret) {
return ret;
}
osm_log(p_bo->p_vendor->p_log, OSM_LOG_DEBUG,
"TID 0x%" PRIx64 ": segment %d accepted\n", tid, seg_num);
p_recv_ctx->expected_seg = seg_num + 1;
OSM_LOG_EXIT(p_bo->p_vendor->p_log);
return IB_SUCCESS;
}
开发者ID:ChristianKniep,项目名称:opensm-qnibng,代码行数:34,代码来源:osm_vendor_mlx_dispatcher.c
示例2: osm_vendor_send
/**********************************************************************
Send a MAD through.
What is unclear to me is the need for the setting of all the MAD Wrapper
fields. Seems like the OSM uses these values during it's processing...
**********************************************************************/
ib_api_status_t
osm_vendor_send(IN osm_bind_handle_t h_bind,
IN osm_madw_t * const p_madw, IN boolean_t const resp_expected)
{
osm_ts_bind_info_t *p_bind = (osm_ts_bind_info_t *) h_bind;
osm_vendor_t *const p_vend = p_bind->p_vend;
osm_vend_wrap_t *const p_vw = osm_madw_get_vend_ptr(p_madw);
ib_api_status_t status;
OSM_LOG_ENTER(p_vend->p_log);
/*
* If a response is expected to this MAD, then preallocate
* a mad wrapper to contain the wire MAD received in the
* response. Allocating a wrapper here allows for easier
* failure paths than after we already received the wire mad.
*/
if (resp_expected == TRUE) {
/* we track it in the vendor wrapper */
p_vw->p_resp_madw =
osm_mad_pool_get_wrapper_raw(p_bind->p_osm_pool);
if (p_vw->p_resp_madw == NULL) {
osm_log(p_vend->p_log, OSM_LOG_ERROR,
"osm_vendor_send: ERR 5024: "
"Unable to allocate MAD wrapper.\n");
status = IB_INSUFFICIENT_RESOURCES;
goto Exit;
}
/* put some minimal info on that wrapper */
((osm_madw_t *) (p_vw->p_resp_madw))->h_bind = h_bind;
/* we also want to track it in the TID based map */
status = osm_transaction_mgr_insert_madw((osm_bind_handle_t *)
p_bind, p_madw);
if (status != IB_SUCCESS) {
osm_log(p_vend->p_log, OSM_LOG_ERROR,
"osm_vendor_send: ERR 5025: "
"Error inserting request madw by TID (%d).\n",
status);
}
} else
p_vw->p_resp_madw = NULL;
/* do the actual send */
/* HACK: to be replaced by call to RMPP Segmentation */
status = osm_ts_send_mad(p_bind, p_madw);
/* we do not get an asycn callback so call it ourselves */
/* this will handle all cleanup if neccessary */
__osm_ts_send_callback(p_bind, !resp_expected, p_madw, status);
Exit:
OSM_LOG_EXIT(p_vend->p_log);
return (status);
}
开发者ID:2014-class,项目名称:freerouter,代码行数:62,代码来源:osm_vendor_ts.c
示例3: __osm_vendor_ts_poller
/**********************************************************************
* Poller thread:
* Always receive 256byte mads from the devcie file
**********************************************************************/
void __osm_vendor_ts_poller(IN void *p_ptr)
{
int ts_ret_code;
struct ib_mad mad;
osm_mad_addr_t mad_addr;
osm_ts_bind_info_t *const p_bind = (osm_ts_bind_info_t *) p_ptr;
OSM_LOG_ENTER(p_bind->p_vend->p_log);
/* we set the type of cancelation for this thread */
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
while (1) {
/* we read one mad at a time and pass it to the read callback function */
ts_ret_code = read(p_bind->ul_dev_fd, &mad, sizeof(mad));
if (ts_ret_code != sizeof(mad)) {
osm_log(p_bind->p_vend->p_log, OSM_LOG_ERROR,
"__osm_vendor_ts_poller: ERR 5003: "
"error with read, bytes = %d, errno = %d\n",
ts_ret_code, errno);
} else {
osm_log(p_bind->p_vend->p_log, OSM_LOG_DEBUG,
"__osm_vendor_ts_poller: "
"MAD QPN:%d SLID:0x%04x class:0x%02x "
"__osm_vendor_ts_poller:0x%02x attr:0x%04x status:0x%04x "
"__osm_vendor_ts_poller:0x%016" PRIx64 "\n",
cl_ntoh32(mad.dqpn),
cl_ntoh16(mad.slid),
mad.mgmt_class,
mad.r_method,
cl_ntoh16(mad.attribute_id),
cl_ntoh16(mad.status),
cl_ntoh64(mad.transaction_id));
/* first arrange an address */
__osm_ts_conv_mad_rcv_desc_to_osm_addr(p_bind->p_vend,
&mad,
(((ib_mad_t *) &
mad)->
mgmt_class ==
IB_MCLASS_SUBN_LID)
||
(((ib_mad_t *) &
mad)->
mgmt_class ==
IB_MCLASS_SUBN_DIR),
&mad_addr);
/* call the receiver callback */
/* HACK: this should be replaced with a call to the RMPP Assembly ... */
__osm_ts_rcv_callback(p_bind, &mad_addr, 256, &mad);
}
}
OSM_LOG_EXIT(p_bind->p_vend->p_log);
}
开发者ID:2014-class,项目名称:freerouter,代码行数:59,代码来源:osm_vendor_ts.c
示例4: __osmv_dispatch_simple_mad
static void
__osmv_dispatch_simple_mad(IN osm_bind_handle_t h_bind,
IN const ib_mad_t * p_mad,
IN osmv_txn_ctx_t * p_txn,
IN const osm_mad_addr_t * p_mad_addr)
{
osm_madw_t *p_madw;
ib_mad_t *p_mad_buf;
osm_madw_t *p_req_madw = NULL;
osmv_bind_obj_t *p_bo = (osmv_bind_obj_t *) h_bind;
OSM_LOG_ENTER(p_bo->p_vendor->p_log);
/* Build the MAD wrapper to be returned to the user.
* The actual storage for the MAD is allocated there.
*/
p_madw =
osm_mad_pool_get(p_bo->p_osm_pool, h_bind, MAD_BLOCK_SIZE,
p_mad_addr);
if (NULL == p_madw) {
osm_log(p_bo->p_vendor->p_log, OSM_LOG_ERROR,
"__osmv_dispatch_simple_mad: ERR 6501: "
"Out Of Memory - could not allocate a buffer of size %d\n",
MAD_BLOCK_SIZE);
goto dispatch_simple_mad_done;
}
p_mad_buf = osm_madw_get_mad_ptr(p_madw);
/* Copy the payload to the MAD buffer */
memcpy((void *)p_mad_buf, (void *)p_mad, MAD_BLOCK_SIZE);
if (NULL != p_txn) {
/* This is a RESPONSE MAD. Pair it with the REQUEST MAD, pass upstream */
p_req_madw = p_txn->p_madw;
CL_ASSERT(NULL != p_req_madw);
p_mad_buf->trans_id = cl_hton64(osmv_txn_get_tid(p_txn));
osm_log(p_bo->p_vendor->p_log, OSM_LOG_DEBUG,
"Restoring the original TID to 0x%" PRIx64 "\n",
cl_ntoh64(p_mad_buf->trans_id));
/* Reply matched, transaction complete */
osmv_txn_done(h_bind, osmv_txn_get_key(p_txn), FALSE);
} else {
/* This is a REQUEST MAD. Don't create a context, pass upstream */
}
/* Do the job ! */
p_bo->recv_cb(p_madw, p_bo->cb_context, p_req_madw);
dispatch_simple_mad_done:
OSM_LOG_EXIT(p_bo->p_vendor->p_log);
}
开发者ID:ChristianKniep,项目名称:opensm-qnibng,代码行数:55,代码来源:osm_vendor_mlx_dispatcher.c
示例5: osmv_txn_lock
void osmv_txn_lock(IN osm_bind_handle_t h_bind)
{
osmv_bind_obj_t *p_bo = (osmv_bind_obj_t *) h_bind;
osm_log(p_bo->p_vendor->p_log, OSM_LOG_DEBUG,
"--> Acquiring lock %p on bind handle %p\n", &p_bo->lock, p_bo);
cl_spinlock_acquire(&p_bo->lock);
osm_log(p_bo->p_vendor->p_log, OSM_LOG_DEBUG,
"--> Acquired lock %p on bind handle %p\n", &p_bo->lock, p_bo);
}
开发者ID:2014-class,项目名称:freerouter,代码行数:12,代码来源:osm_vendor_mlx_txn.c
示例6: osmv_txn_init
ib_api_status_t
osmv_txn_init(IN osm_bind_handle_t h_bind,
IN uint64_t tid, IN uint64_t key, OUT osmv_txn_ctx_t ** pp_txn)
{
ib_api_status_t st;
osmv_txn_ctx_t *p_txn;
osmv_bind_obj_t *p_bo = (osmv_bind_obj_t *) h_bind;
OSM_LOG_ENTER(p_bo->p_vendor->p_log);
CL_ASSERT(NULL != h_bind && NULL != pp_txn);
osm_log(p_bo->p_vendor->p_log, OSM_LOG_DEBUG,
"Starting transaction 0x%016" PRIx64
" (key=0x%016" PRIx64 ")\n", tid, key);
p_txn = malloc(sizeof(osmv_txn_ctx_t));
if (!p_txn) {
return IB_INSUFFICIENT_MEMORY;
}
memset(p_txn, 0, sizeof(osmv_txn_ctx_t));
p_txn->p_log = p_bo->txn_mgr.p_log;
p_txn->tid = tid;
p_txn->key = key;
p_txn->p_madw = NULL;
p_txn->rmpp_txfr.rmpp_state = OSMV_TXN_RMPP_NONE;
/* insert into transaction manager DB */
st = __osmv_txnmgr_insert_txn(&p_bo->txn_mgr, p_txn, key);
if (IB_SUCCESS != st) {
osm_log(p_bo->p_vendor->p_log, OSM_LOG_ERROR,
"osmv_txn_init: ERR 6703: "
"Failed to insert to transaction 0x%016" PRIx64
" (key=0x%016" PRIx64 ") to manager DB\n",
tid, key);
goto insert_txn_failed;
}
*pp_txn = p_txn;
OSM_LOG_EXIT(p_bo->p_vendor->p_log);
return IB_SUCCESS;
insert_txn_failed:
free(p_txn);
OSM_LOG_EXIT(p_bo->p_vendor->p_log);
return st;
}
开发者ID:ChristianKniep,项目名称:opensm-qnibng,代码行数:49,代码来源:osm_vendor_mlx_txn.c
示例7: __osm_vendor_internal_unbind
static void __osm_vendor_internal_unbind(osm_bind_handle_t h_bind)
{
osmv_bind_obj_t *p_bo = (osmv_bind_obj_t *) h_bind;
osm_log_t *p_log = p_bo->p_vendor->p_log;
OSM_LOG_ENTER(p_log);
/* "notifying" all that from now on no new sends can be done */
p_bo->txn_mgr.p_event_wheel->closing = TRUE;
osmv_txn_lock(p_bo);
/*
the is_closing is set under lock we we know we only need to
check for it after obtaining the lock
*/
p_bo->is_closing = TRUE;
/* notifying all sleeping rmpp sends to exit */
osmv_txn_abort_rmpp_txns(h_bind);
/* unlock the bo to allow for any residual mads to be dispatched */
osmv_txn_unlock(p_bo);
osm_log(p_log, OSM_LOG_DEBUG,
"__osm_vendor_internal_unbind: destroying transport mgr.. \n");
/* wait for the receiver thread to exit */
osmv_transport_done(h_bind);
/* lock to avoid any collissions while we cleanup the structs */
osmv_txn_lock(p_bo);
osm_log(p_log, OSM_LOG_DEBUG,
"__osm_vendor_internal_unbind: destroying txn mgr.. \n");
osmv_txnmgr_done(h_bind);
osm_log(p_log, OSM_LOG_DEBUG,
"__osm_vendor_internal_unbind: destroying bind lock.. \n");
osmv_txn_unlock(p_bo);
/*
we intentionally let the p_bo and its lock leak -
as we did not implement a way to track active bind handles provided to
the client - and the client might use them
cl_spinlock_destroy(&p_bo->lock);
free(p_bo);
*/
OSM_LOG_EXIT(p_log);
}
开发者ID:ChristianKniep,项目名称:opensm-qnibng,代码行数:48,代码来源:osm_vendor_mlx.c
示例8: OSM_LOG_ENTER
/**********************************************************************
* Create and Initialize osm_vendor_t Object
**********************************************************************/
osm_vendor_t *osm_vendor_new(IN osm_log_t * const p_log,
IN const uint32_t timeout)
{
ib_api_status_t status;
osm_vendor_t *p_vend;
OSM_LOG_ENTER(p_log);
CL_ASSERT(p_log);
p_vend = malloc(sizeof(*p_vend));
if (p_vend != NULL) {
memset(p_vend, 0, sizeof(*p_vend));
status = osm_vendor_init(p_vend, p_log, timeout);
if (status != IB_SUCCESS) {
osm_vendor_delete(&p_vend);
}
} else {
osm_log(p_vend->p_log, OSM_LOG_ERROR,
"osm_vendor_new: ERR 5007: "
"Fail to allocate vendor object.\n");
}
OSM_LOG_EXIT(p_log);
return (p_vend);
}
开发者ID:2014-class,项目名称:freerouter,代码行数:30,代码来源:osm_vendor_ts.c
示例9: osmv_txn_unlock
void osmv_txn_unlock(IN osm_bind_handle_t h_bind)
{
osmv_bind_obj_t *p_bo = (osmv_bind_obj_t *) h_bind;
cl_spinlock_t *p_lock = &p_bo->lock;
osm_log_t *p_log = p_bo->p_vendor->p_log;
osm_log(p_log, OSM_LOG_DEBUG,
"<-- Releasing lock %p on bind handle %p\n", p_lock, p_bo);
cl_spinlock_release(&p_bo->lock);
/* We'll use the saved ptrs, since now the p_bo can be destroyed already */
osm_log(p_log, OSM_LOG_DEBUG,
"<-- Released lock %p on bind handle %p\n", p_lock, p_bo);
}
开发者ID:2014-class,项目名称:freerouter,代码行数:16,代码来源:osm_vendor_mlx_txn.c
示例10: __osmv_txnmgr_remove_txn
ib_api_status_t
__osmv_txnmgr_remove_txn(IN osmv_txn_mgr_t * p_tx_mgr,
IN uint64_t key, OUT osmv_txn_ctx_t ** pp_txn)
{
cl_map_obj_t *p_obj;
cl_map_item_t *p_item;
OSM_LOG_ENTER(p_tx_mgr->p_log);
CL_ASSERT(p_tx_mgr);
CL_ASSERT(pp_txn);
p_item = cl_qmap_remove(p_tx_mgr->p_txn_map, key);
if (p_item == cl_qmap_end(p_tx_mgr->p_txn_map)) {
osm_log(p_tx_mgr->p_log, OSM_LOG_ERROR,
"__osmv_txnmgr_remove_txn: ERR 6701: "
"Could not remove the transaction 0x%llX - "
"something is really wrong!\n", key);
OSM_LOG_EXIT(p_tx_mgr->p_log);
return IB_NOT_FOUND;
}
p_obj = PARENT_STRUCT(p_item, cl_map_obj_t, item);
*pp_txn = cl_qmap_obj(p_obj);
free(p_obj);
OSM_LOG_EXIT(p_tx_mgr->p_log);
return IB_SUCCESS;
}
开发者ID:2014-class,项目名称:freerouter,代码行数:32,代码来源:osm_vendor_mlx_txn.c
示例11: OSM_LOG_ENTER
ib_mad_t *osm_vendor_get(IN osm_bind_handle_t h_bind,
IN const uint32_t size,
IN osm_vend_wrap_t * const p_vend_wrap)
{
osm_vendor_t *p_vend;
ib_mad_t *p_mad;
OSM_LOG_ENTER(h_bind->p_vend->p_log);
UNUSED_PARAM(p_vend_wrap);
p_vend = h_bind->p_vend;
/*
Simply malloc the MAD off the heap.
*/
p_mad = (ib_mad_t *) malloc(size);
osm_log(p_vend->p_log, OSM_LOG_VERBOSE,
"osm_vendor_get: " "MAD %p.\n", p_mad);
if (p_mad)
memset(p_mad, 0, size);
OSM_LOG_EXIT(p_vend->p_log);
return (p_mad);
}
开发者ID:ChristianKniep,项目名称:opensm-qnibng,代码行数:26,代码来源:osm_vendor_test.c
示例12: osm_vendor_put
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);
}
}
开发者ID:ChristianKniep,项目名称:opensm-qnibng,代码行数:25,代码来源:osm_vendor_mlx.c
示例13: osm_vendor_put
/**********************************************************************
* 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);
}
开发者ID:2014-class,项目名称:freerouter,代码行数:34,代码来源:osm_vendor_ts.c
示例14: osm_vendor_set_sm
void osm_vendor_set_sm(IN osm_bind_handle_t h_bind, IN boolean_t is_sm_val)
{
osm_ts_bind_info_t *p_bind = (osm_ts_bind_info_t *) h_bind;
osm_vendor_t *p_vend = p_bind->p_vend;
VAPI_ret_t status;
VAPI_hca_attr_t attr_mod;
VAPI_hca_attr_mask_t attr_mask;
OSM_LOG_ENTER(p_vend->p_log);
memset(&attr_mod, 0, sizeof(attr_mod));
memset(&attr_mask, 0, sizeof(attr_mask));
attr_mod.is_sm = is_sm_val;
attr_mask = HCA_ATTR_IS_SM;
status =
VAPI_modify_hca_attr(p_bind->hca_hndl, p_bind->port_num, &attr_mod,
&attr_mask);
if (status != VAPI_OK) {
osm_log(p_vend->p_log, OSM_LOG_ERROR,
"osm_vendor_set_sm: ERR 5027: "
"Unable set 'IS_SM' bit to:%u in port attributes (%d).\n",
is_sm_val, status);
}
OSM_LOG_EXIT(p_vend->p_log);
}
开发者ID:2014-class,项目名称:freerouter,代码行数:28,代码来源:osm_vendor_ts.c
示例15: osm_ts_send_mad
/**********************************************************************
Actually Send a MAD
MADs are buffers of type: struct ib_mad - so they are limited by size.
This is for internal use by osm_vendor_send and the transaction mgr
retry too.
**********************************************************************/
ib_api_status_t
osm_ts_send_mad(IN osm_ts_bind_info_t * p_bind, IN osm_madw_t * const p_madw)
{
osm_vendor_t *const p_vend = p_bind->p_vend;
osm_mad_addr_t *const p_mad_addr = osm_madw_get_mad_addr_ptr(p_madw);
ib_mad_t *const p_mad = osm_madw_get_mad_ptr(p_madw);
struct ib_mad ts_mad;
int ret;
ib_api_status_t status;
OSM_LOG_ENTER(p_vend->p_log);
/*
* Copy the MAD over to the sent mad
*/
memcpy(&ts_mad, p_mad, 256);
/*
* For all sends other than directed route SM MADs,
* acquire an address vector for the destination.
*/
if (p_mad->mgmt_class != IB_MCLASS_SUBN_DIR) {
__osm_ts_conv_osm_addr_to_ts_addr(p_mad_addr,
p_mad->mgmt_class ==
IB_MCLASS_SUBN_LID, &ts_mad);
} else {
/* is a directed route - we need to construct a permissive address */
/* we do not need port number since it is part of the mad_hndl */
ts_mad.dlid = IB_LID_PERMISSIVE;
ts_mad.slid = IB_LID_PERMISSIVE;
}
if ((p_mad->mgmt_class == IB_MCLASS_SUBN_DIR) ||
(p_mad->mgmt_class == IB_MCLASS_SUBN_LID)) {
ts_mad.sqpn = 0;
ts_mad.dqpn = 0;
} else {
ts_mad.sqpn = 1;
ts_mad.dqpn = 1;
}
ts_mad.port = p_bind->port_num;
/* send it */
ret = write(p_bind->ul_dev_fd, &ts_mad, sizeof(ts_mad));
if (ret != sizeof(ts_mad)) {
osm_log(p_vend->p_log, OSM_LOG_ERROR,
"osm_ts_send_mad: ERR 5026: "
"Error sending mad (%d).\n", ret);
status = IB_ERROR;
goto Exit;
}
status = IB_SUCCESS;
Exit:
OSM_LOG_EXIT(p_vend->p_log);
return (status);
}
开发者ID:2014-class,项目名称:freerouter,代码行数:65,代码来源:osm_vendor_ts.c
示例16: osm_report_sm_state
void osm_report_sm_state(osm_sm_t * sm)
{
char buf[64];
const char *state_str = osm_get_sm_mgr_state_str(sm->p_subn->sm_state);
osm_log(sm->p_log, OSM_LOG_SYS, "Entering %s state\n", state_str);
snprintf(buf, sizeof(buf), "ENTERING SM %s STATE", state_str);
OSM_LOG_MSG_BOX(sm->p_log, OSM_LOG_VERBOSE, buf);
}
开发者ID:Cai900205,项目名称:test,代码行数:9,代码来源:osm_sm_state_mgr.c
注:本文中的osm_log函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论