diff options
Diffstat (limited to 'nest')
-rw-r--r-- | nest/rt-table.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/nest/rt-table.c b/nest/rt-table.c index 37d0307b..dad5d0cc 100644 --- a/nest/rt-table.c +++ b/nest/rt-table.c @@ -3061,10 +3061,19 @@ rt_export_cleanup(struct rtable_private *tab) { switch (atomic_load_explicit(&eh->h.export_state, memory_order_acquire)) { - case TES_DOWN: - case TES_HUNGRY: + /* Export cleanup while feeding isn't implemented */ + case TES_FEEDING: + goto done; + + /* States not interfering with export cleanup */ + case TES_DOWN: /* This should not happen at all */ + log(L_WARN "%s: Export cleanup found hook %s in explicit state TES_DOWN", tab->name, eh->h.req->name); + /* fall through */ + case TES_HUNGRY: /* Feeding waiting for uncork */ + case TES_STOP: /* No more export will happen on this hook */ continue; + /* Regular export */ case TES_READY: { struct rt_pending_export *last = atomic_load_explicit(&eh->last_export, memory_order_acquire); @@ -3081,8 +3090,7 @@ rt_export_cleanup(struct rtable_private *tab) } default: - /* It's only safe to cleanup when the export state is idle or regular. No feeding or stopping allowed. */ - goto done; + bug("%s: Strange export state of hook %s: %d", tab->name, eh->h.req->name, atomic_load_explicit(&eh->h.export_state, memory_order_relaxed)); } } |