Пример #1
0
static void cavan_alarm_sighandler(int signum)
{
	if (signum == SIGALRM && global_alarm_thread)
	{
		cavan_thread_resume(&global_alarm_thread->thread);
	}
}
Пример #2
0
void cavan_mux_append_send_package(struct cavan_mux *mux, struct cavan_mux_package *package)
{
	struct cavan_mux_package_raw *package_raw = CAVAN_MUX_PACKAGE_GET_RAW(package);

	package->magic = CAVAN_MUX_MAGIC;

	cavan_lock_acquire(&mux->lock);

	*mux->package_tail = package_raw;
	package_raw->next = NULL;
	mux->package_tail = &package_raw->next;
	cavan_thread_resume(&mux->send_thread);

	cavan_lock_release(&mux->lock);
}
Пример #3
0
int cavan_alarm_insert_node(struct cavan_alarm_thread *thread, struct cavan_alarm_node *node, struct tm *date)
{
	time_t curr_time;

	if (node->handler == NULL)
	{
		pr_red_info("node->handler == NULL");
		return -EINVAL;
	}

	if (date)
	{
		node->time = mktime(date);
	}

	curr_time = time(NULL);
	if (node->time < curr_time)
	{
		node->time += TIME_DAY(1);
		if (node->time < curr_time)
		{
			pr_red_info("Date too old");
			return -EINVAL;
		}
	}

	cavan_show_date2(node->time, "date = ");

	pthread_mutex_lock(&thread->lock);

	double_link_remove(&thread->link, &node->node);
	cavan_alarm_insert_node_base(thread, node);
	cavan_thread_resume(&thread->thread);

	pthread_mutex_unlock(&thread->lock);

	return 0;
}