Переменная 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 ().

Другие вопросы по тегам