From: Chunsong Feng Date: Fri, 27 Dec 2019 11:28:30 +0000 (+0800) Subject: msg/async/dpdk: destroy fd in do_request X-Git-Tag: v15.1.1~421^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3063ddcdb52603b67d5ac0bd3802c388c1bfe170;p=ceph.git msg/async/dpdk: destroy fd in do_request when testing with dpdk,there is an error log "Event (0xaaaaff889288 nevent = 5000 time_id = 21540). delete_time_event id = 21471 not found", raised in EventCenter::delete_time_event. In EventCenter::process_time_events, the fd in event_map is deleted, but fd is not destroyed, and then fd will not found in delete_time_event. Destroy fd in do_request to ensure that fd is zero, and then delete_time_event (fd) will not be called. Signed-off-by: Chunsong Feng Signed-off-by: luo rixin --- diff --git a/src/msg/async/dpdk/TCP.h b/src/msg/async/dpdk/TCP.h index b7bd7132decd..a0104fb44f41 100644 --- a/src/msg/async/dpdk/TCP.h +++ b/src/msg/async/dpdk/TCP.h @@ -234,6 +234,7 @@ class tcp { public: C_handle_delayed_ack(tcb *t): tc(t) { } void do_request(uint64_t r) { + tc->_delayed_ack_fd.destroy(); tc->_nr_full_seg_received = 0; tc->output(); } @@ -245,6 +246,7 @@ class tcp { public: C_handle_retransmit(tcb *t): tc(t) { } void do_request(uint64_t r) { + tc->retransmit_fd.destroy(); tc->retransmit(); } }; @@ -255,6 +257,7 @@ class tcp { public: C_handle_persist(tcb *t): tc(t) { } void do_request(uint64_t r) { + tc->persist_fd.destroy(); tc->persist(); } };