Exemple #1
0
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);
}
Exemple #2
0
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;
}
Exemple #3
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;
}
Exemple #4
0
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;
}