From fd949261f2be814d8deb410999e1dafcc2c5bb35 Mon Sep 17 00:00:00 2001 From: Kevin Webb Date: Wed, 19 Nov 2008 22:36:04 +0000 Subject: [PATCH] (Hopefully) fix the bug that was causing flows to not be found in standard_table_remove and thus loop for much longer than expected. --- drl/standard.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drl/standard.c b/drl/standard.c index 5b860a3..5b9632e 100644 --- a/drl/standard.c +++ b/drl/standard.c @@ -137,7 +137,6 @@ int standard_table_sample(standard_flow_table table, const key_flow *key) { void standard_table_remove(standard_flow_table table, standard_flow *flow) { key_flow key; uint32_t hash; - standard_flow *current, *prev; assert(flow); @@ -156,23 +155,23 @@ void standard_table_remove(standard_flow_table table, standard_flow *flow) { /* It's the head of the hash list. */ table->flows[hash] = flow->nexth; } else { + standard_flow *current, *prev; + prev = table->flows[hash]; - current = table->flows[hash]->nexth; - while (current != NULL) { + for (current = table->flows[hash]->nexth; current; current = current->nexth) { if (current == flow) { prev->nexth = flow->nexth; break; } else { prev = current; - current = current->next; } } - //assert(current != NULL); if (current == NULL) { - printlog(LOG_DEBUG, "Flow %p disappeared?\n", flow); + printlog(LOG_CRITICAL, "Flow %p disappeared?\n", flow); } + assert(current != NULL); } /* Remove the flow from the linked list. */ -- 2.43.0