Переменная libevent `struct event` может быть изменена?
В функции обратного вызова on_accept
Я устраиваю событие conn_ev
conn_ev = (struct event *)malloc(sizeof(struct event));
event_set(conn_ev, connfd, EV_READ, on_recv, conn_ev);
event_base_set(base, conn_ev);
event_add(conn_ev, NULL);
функция обратного вызова on_recv
будет срабатывать при наличии нового соединения.
и в функции обратного вызова on_recv(int connfd, short event, void *conn_event)
, Я имею
conn_ev = (struct event *) conn_event;
event_set(conn_ev, connfd, EV_WRITE, on_send, conn_ev);
event_base_set(base, conn_ev);
event_add(conn_ev, NULL);
Итак conn_ev
модифицируется в этой функции обратного вызова.
Есть ли здесь какие-либо проблемы / ловушки, чтобы я лучше malloc
новый conn_ev?
Спасибо!
1 ответ
Вы должны убедиться, что событие не используется перед его изменением. Если вы находитесь в обратном вызове этого конкретного события, и оно не является постоянным, вы можете быть в порядке, но я бы посоветовал вызвать event_del () в любом случае.
Хотя это может работать, вы не должны использовать malloc () и event_set (который сейчас не рекомендуется). Вместо этого используйте event_new () или хотя бы замените event_set на event_assign ().