]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async/dpdk: destroy fd in do_request 32690/head
authorChunsong Feng <fengchunsong@huawei.com>
Fri, 27 Dec 2019 11:28:30 +0000 (19:28 +0800)
committerluo rixin <luorixin@huawei.com>
Fri, 17 Jan 2020 02:55:07 +0000 (10:55 +0800)
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 <fengchunsong@huawei.com>
Signed-off-by: luo rixin <luorixin@huawei.com>
src/msg/async/dpdk/TCP.h

index b7bd7132decdeee9138c3ae8a71a25f7ca1fb54e..a0104fb44f4133ba8d33939557d69161314910c4 100644 (file)
@@ -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();
     }
   };