diff options
author | Maria Matejka <mq@ucw.cz> | 2022-10-11 11:08:49 +0200 |
---|---|---|
committer | Maria Matejka <mq@ucw.cz> | 2022-10-12 10:05:16 +0200 |
commit | c1cb2dc31c26154fc616607b767f3f20c6efe25b (patch) | |
tree | b0cf3d3b6bc204255f18c0ce6b6fe54b5b0ad76b | |
parent | 6d5929be24ec0e7846b83fab7b4ea910accbcc80 (diff) |
TES_HUNGRY doesn't inhibit export cleanup any more
-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)); } } |