/// 检查监控 /// \param[in] *sm /// \return void void skynet_monitor_check(struct skynet_monitor *sm) { if (sm->version == sm->check_version) { // 如果版本等于检查版本 if (sm->destination) { // 目的是否存在 skynet_context_endless(sm->destination); skynet_error(NULL, "A message from [ :%08x ] to [ :%08x ] maybe in an endless loop (version = %d)", sm->source , sm->destination, sm->version); } } else { // 否则检查版本等于版本 sm->check_version = sm->version; } }
void skynet_monitor_check(struct skynet_monitor *sm) { if (sm->version == sm->check_version) { if (sm->destination) { skynet_context_endless(sm->destination); skynet_error(NULL, "A message from [ :%08x ] to [ :%08x ] maybe in an endless loop", sm->source , sm->destination); } } else { sm->check_version = sm->version; } }
// check 函数和上面的 trigger 函数不是运行在同一个线程的 void skynet_monitor_check(struct skynet_monitor *sm) { if (sm->version == sm->check_version) { if (sm->destination) { // skynet_context 在 dispatch_message 数据之后, 会设置 destination 参数为 0. skynet_context_endless(sm->destination); skynet_error(NULL, "A message from [ :%08x ] to [ :%08x ] maybe in an endless loop (version = %d)", sm->source, sm->destination, sm->version); } } else { sm->check_version = sm->version; } }