Only call odp_pktio_close on opened pktio and output an error
 message if odp_pktio_close failed.

Fixes: https://bugs.linaro.org/show_bug.cgi?id=1854
Signed-off-by: Nicolas Morey-Chaisemartin <nmo...@kalray.eu>
---
 platform/linux-generic/odp_packet_io.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/platform/linux-generic/odp_packet_io.c 
b/platform/linux-generic/odp_packet_io.c
index 1245745..3b9c963 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -37,6 +37,16 @@ static inline int entry_id_to_pktio_id(int entry_id)
        return entry_id + 1;
 }
 
+static int is_free(pktio_entry_t *entry)
+{
+       return (entry->s.taken == 0);
+}
+
+static void set_free(pktio_entry_t *entry)
+{
+       entry->s.taken = 0;
+}
+
 int odp_pktio_init_global(void)
 {
        char name[ODP_QUEUE_NAME_LEN];
@@ -101,7 +111,10 @@ int odp_pktio_term_global(void)
 
        for (id = 0; id < ODP_CONFIG_PKTIO_ENTRIES; ++id) {
                pktio_entry = &pktio_tbl->entries[id];
-               odp_pktio_close(pktio_entry->s.handle);
+               if (!is_free(pktio_entry))
+                       if (odp_pktio_close(pktio_entry->s.handle))
+                               ODP_ERR("failed to close pktio %d",
+                                       entry_id_to_pktio_id(id));
                odp_queue_destroy(pktio_entry->s.outq_default);
        }
 
@@ -124,16 +137,6 @@ int odp_pktio_init_local(void)
        return 0;
 }
 
-static int is_free(pktio_entry_t *entry)
-{
-       return (entry->s.taken == 0);
-}
-
-static void set_free(pktio_entry_t *entry)
-{
-       entry->s.taken = 0;
-}
-
 static void set_taken(pktio_entry_t *entry)
 {
        entry->s.taken = 1;
-- 
2.6.1.3.g8d02103

_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to