The memory of the indirect action handles should be freed after
being destroyed in the flush. The behavior needs to be consistent
with the single handle destroy.

Or else, there will be some unexpected error when the action handle
is destroyed for the 2nd time, for example, the port needs to be
closed again.

Fixes: f7352c176bbf ("app/testpmd: fix use of indirect action after port close")
Cc: dmitry.kozl...@gmail.com
Cc: sta...@dpdk.org

Signed-off-by: Bing Zhao <bi...@nvidia.com>
Reviewed-by: Dariusz Sosnowski <dsosnow...@nvidia.com>
---
 app/test-pmd/config.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index ba1007ace6..f62ba90c87 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -1918,8 +1918,7 @@ port_action_handle_flush(portid_t port_id)
                /* Poisoning to make sure PMDs update it in case of error. */
                memset(&error, 0x44, sizeof(error));
                if (pia->handle != NULL) {
-                       ret = pia->type ==
-                             RTE_FLOW_ACTION_TYPE_INDIRECT_LIST ?
+                       ret = pia->type == RTE_FLOW_ACTION_TYPE_INDIRECT_LIST ?
                              rte_flow_action_list_handle_destroy
                                      (port_id, pia->list_handle, &error) :
                              rte_flow_action_handle_destroy
@@ -1929,11 +1928,9 @@ port_action_handle_flush(portid_t port_id)
                                       pia->id);
                                ret = port_flow_complain(&error);
                        }
-                       tmp = &pia->next;
-               } else {
-                       *tmp = pia->next;
-                       free(pia);
                }
+               *tmp = pia->next;
+               free(pia);
        }
        return ret;
 }
-- 
2.34.1

Reply via email to