我需要使用创建事件malloc
,但我不知道在哪里释放它们,我想知道是否允许在其回调函数中释放事件,例如:
struct event *pkt_ev = (struct event *)malloc(sizeof(struct event));
evtimer_set(&pkt_ev, timer_cb, &pkt_ev);
event_base_set(base, &pkt_ev);
event_add(&pkt_ev, timeout);
回调函数 timer_cb():
timer_cb(int fd, short ev, void* arg){
.......
free(arg); // here the arg is &pkt_ev
}
我最初的想法是:回调函数timer_cb()
调用后,libevent会隐式调用event_del(&pkt_ev)
. &pkt_ev
但是由于我在回调中释放了,所以event_del(&pkt_ev)
. 这样对吗?
但是,如果event_del(&pkt_ev)
不在乎内容pkt_ev
指向什么,那可能不是问题吗?
此外,在这个函数中:
event_add(struct event *ev, struct timeval *timeout);
所指向的内容ev
应该非常关心,一般应该是一个全局变量或者它的生命周期应该覆盖事件循环(即事件循环函数运行时,它会访问 所指向的内容ev
)。timeout指向的内容呢?timeout 指向的内容是否应该覆盖事件循环?