delete timed-task from timer, when it lose efficacy.

Signed-off-by: AaronKonishi <konishi5202@163.com>
master
AaronKonishi 2019-05-07 09:30:28 +08:00
parent fcdcd2b4fe
commit 0627f2b504
1 changed files with 12 additions and 0 deletions

View File

@ -94,9 +94,11 @@ typedef struct {
{ \
int nfds, i; \
char buf[128]; \
struct epoll_event event; \
MT_TIMER_NODE *timer_node = NULL; \
struct epoll_event events[mt_timer_##name.timer_max]; \
/*pthread_detach(pthread_self());*/ \
event.events = EPOLLIN | EPOLLET; \
MT_TIMER_PRINT_INL("MT-Timer Info: %s thread is running.\n", #name); \
while(mt_timer_##name.timer_active_flag) \
{ \
@ -120,6 +122,16 @@ typedef struct {
timer_node->timer_cb(timer_node->timer_data); \
timer_node->timer_cnt--; \
} \
else \
{ \
event.data.ptr = (void *)timer_node; \
epoll_ctl(mt_timer_##name.timer_epoll_fd, EPOLL_CTL_DEL, timer_node->timer_fd, &event); \
pthread_rwlock_wrlock(&mt_timer_##name.timer_rwlock); \
HASH_DEL(mt_timer_##name.timer_head, timer_node); \
pthread_rwlock_unlock(&mt_timer_##name.timer_rwlock); \
close(timer_node->timer_fd); \
free(timer_node); \
} \
} \
} \
} \