Removing/freeing elements elements within a STAILQ_FOREACH loop is not safe. FreeBSD defines STAILQ_FOREACH_SAFE macro, which permits these operations safely.
This patch defines this macro for Linux systems, where it is not defined. Signed-off-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy at intel.com> --- NOTE: This patch is based on top of: http://dpdk.org/dev/patchwork/patch/14995/ lib/librte_eal/common/include/rte_tailq.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/librte_eal/common/include/rte_tailq.h b/lib/librte_eal/common/include/rte_tailq.h index cc3c0f1..bba2835 100644 --- a/lib/librte_eal/common/include/rte_tailq.h +++ b/lib/librte_eal/common/include/rte_tailq.h @@ -163,6 +163,13 @@ void __attribute__((constructor, used)) tailqinitfn_ ##t(void) \ (var) = (tvar)) #endif +#ifndef SLIST_FOREACH_SAFE +#define SLIST_FOREACH_SAFE(var, head, field, tvar) \ + for ((var) = SLIST_FIRST((head)); \ + (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ + (var) = (tvar)) +#endif + #ifdef __cplusplus } #endif -- 2.4.11