fix stop timer

This commit is contained in:
fengzero
2022-10-21 10:38:48 +00:00
parent 04f6a85bfd
commit 1a2c94ad89
+8 -3
View File
@@ -42,6 +42,7 @@ struct neu_event_timer {
struct itimerspec value;
nng_mtx *mtx;
bool stop;
};
struct neu_event_io {
@@ -102,9 +103,11 @@ static void *event_loop(void *arg)
ssize_t size = read(data->fd, &t, sizeof(t));
assert(size != -1);
nng_mtx_lock(data->ctx.timer->mtx);
ret = data->callback.timer(data->usr_data);
nng_mtx_unlock(data->ctx.timer->mtx);
if (!data->ctx.timer->stop) {
nng_mtx_lock(data->ctx.timer->mtx);
ret = data->callback.timer(data->usr_data);
nng_mtx_unlock(data->ctx.timer->mtx);
}
}
break;
case IO:
@@ -180,6 +183,7 @@ neu_event_timer_t *neu_event_add_timer(neu_events_t * events,
timer_ctx->value = value;
timer_ctx->fd = timer_fd;
timer_ctx->event_data = data;
timer_ctx->stop = false;
nng_mtx_alloc(&timer_ctx->mtx);
ret = epoll_ctl(events->epoll_fd, EPOLL_CTL_ADD, timer_fd, &event);
@@ -198,6 +202,7 @@ int neu_event_del_timer(neu_events_t *events, neu_event_timer_t *timer)
zlog_info(neuron, "del timer: %d from epoll: %d", timer->fd,
events->epoll_fd);
timer->stop = true;
nng_mtx_lock(timer->mtx);
close(timer->fd);
epoll_ctl(events->epoll_fd, EPOLL_CTL_DEL, timer->fd, NULL);