static void cavan_alarm_sighandler(int signum) { if (signum == SIGALRM && global_alarm_thread) { cavan_thread_resume(&global_alarm_thread->thread); } }
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); }
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; }