CavanThread::CavanThread(const char *name, cavan_thread_handler_t handler, int flags) { mHandler = handler; mThread.name = name; mThread.wake_handker = NULL; mThread.handler = CavanThreadHandler; cavan_thread_init(&mThread, this, flags); }
int cavan_thread_run_self(struct cavan_thread *thread, void *data, int flags) { int ret; ret = cavan_thread_init(thread, data, flags); if (ret < 0) { pr_red_info("cavan_thread_init"); return ret; } cavan_thread_main_loop(thread); cavan_thread_deinit(thread); return 0; }
int cavan_alarm_thread_init(struct cavan_alarm_thread *alarm_thread) { int ret; struct cavan_thread *thread; ret = pthread_mutex_init(&alarm_thread->lock, NULL); if (ret < 0) { pr_error_info("pthread_mutex_init"); return ret; } ret = double_link_init(&alarm_thread->link, MOFS(struct cavan_alarm_node, node)); if (ret < 0) { pr_red_info("double_link_init"); goto out_pthread_mutex_destroy; } thread = &alarm_thread->thread; thread->name = "ALARM"; thread->wake_handker = NULL; thread->handler = cavan_alarm_thread_handler; ret = cavan_thread_init(thread, alarm_thread); if (ret < 0) { pr_red_info("cavan_thread_init"); goto out_double_link_deinit; } signal(SIGALRM, cavan_alarm_sighandler); return 0; out_double_link_deinit: double_link_deinit(&alarm_thread->link); out_pthread_mutex_destroy: pthread_mutex_destroy(&alarm_thread->lock); return ret; }
int cavan_thread_run(struct cavan_thread *thread, void *data, int flags) { int ret; ret = cavan_thread_init(thread, data, flags); if (ret < 0) { pr_red_info("cavan_thread_init"); return ret; } ret = cavan_thread_start(thread); if (ret < 0) { pr_red_info("cavan_thread_start"); goto out_cavan_thread_deinit; } return 0; out_cavan_thread_deinit: cavan_thread_deinit(thread); return ret; }