From: Maria Matejka Date: Tue, 11 Oct 2022 09:08:49 +0000 (+0200) Subject: TES_HUNGRY doesn't inhibit export cleanup any more X-Git-Tag: v3.0-alpha1~96 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c1cb2dc31c26154fc616607b767f3f20c6efe25b;p=thirdparty%2Fbird.git TES_HUNGRY doesn't inhibit export cleanup any more --- diff --git a/nest/rt-table.c b/nest/rt-table.c index 37d0307ba..dad5d0cc3 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)); } }