int start_tasks() { BU_UINT32 ulRet = 0; int i = 0; for(; i < BU_ARRAY_NUM(s_task_info); i++) { if(s_task_info[i].name[0] != 0 && s_task_info[i].task_enter_func_p != NULL) { ulRet = pthread_create( &(s_task_info[i].thread_id), NULL, (void* (*)(void*))s_task_info[i].task_enter_func_p, NULL); if (ulRet) { E_LOG("'%s' task create fail!\n", s_task_info[i].name); } else { I_LOG("'%s' task create success!\n", s_task_info[i].name); if(s_task_info[i].queue_head != NULL) { msg_list_init(s_task_info[i].queue_head); } } } } return BU_OK; }
/** * init module function */ static int mod_init(void) { load_tm_f load_tm; DBG("MSILO: initializing ...\n"); /* binding to mysql module */ if (bind_dbmod()) { DBG("MSILO: ERROR: Database module not found\n"); return -1; } /* import the TM auto-loading function */ if ( !(load_tm=(load_tm_f)find_export("load_tm", NO_SCRIPT, 0))) { LOG(L_ERR, "ERROR: msilo: mod_init: can't import load_tm\n"); return -1; } /* let the auto-loading function load all TM stuff */ if (load_tm( &tmb )==-1) return -1; ml = msg_list_init(); if(!ml) { DBG("ERROR: msilo: mod_init: can't initialize msg list\n"); return -1; } register_timer( m_clean_silo, 0, check_time); reg_addr.s = registrar; reg_addr.len = (registrar)?strlen(registrar):0; return 0; }
task_id register_task(task_info_t* task) { BU_UINT32 ulRet = 0; BU_UINT32 i = 0; if(task == NULL) { E_LOG("regist task fail, wrong input\n"); return -1; } if(task->name[0] == 0 || task->task_enter_func_p == NULL) { E_LOG("regist task fail, wrong input\n"); return -1; } for(; i < BU_ARRAY_NUM(s_task_info); i++) { if(s_task_info[i].name[0] == 0 && s_task_info[i].task_enter_func_p == NULL) { memcpy(&(s_task_info[i]), task, sizeof(task_info_t)); ulRet = pthread_create( &(s_task_info[i].thread_id), NULL, (void* (*)(void*))s_task_info[i].task_enter_func_p, NULL); if (ulRet) { E_LOG("'%s' task create fail!\n", s_task_info[i].name); return -1; } else { I_LOG("'%s' task create success!\n", s_task_info[i].name); msg_list_init(s_task_info[i].queue_head); return i; } } } E_LOG("register task fail,task pool full!\n"); return -1; }