diff options
author | 2020-04-08 14:31:45 -0400 | |
---|---|---|
committer | 2020-08-13 17:20:47 +0000 | |
commit | 83be6cb7908533ae8230d39909768d22a322cc3a (patch) | |
tree | 974b57f35c20a66c87d2f61dc00488047bbf3676 /src/vlib | |
parent | 22fb6e6ef8fc81227b3e40cb074f745a3e7361dd (diff) |
misc: fix error handling in punt_replicate
If vlib_buffer_clone (...) fails due to a buffer allocation error, update
*n_dispatched with the actual number of clones, not the requested
number of clones.
Punt_replicate(...) should not set *to_next[0] = bi0. The original
buffer is enqueued separately in punt_dispatch_node(...)
Type: fix
Signed-off-by: Dave Barach <dave@barachs.net>
Change-Id: I774ad8f8c1a0633de4cf8ae5530629201c229347
(cherry picked from commit 1adc7e78ad3eb7e800d0ce3ace56f53ab7aebffe)
Diffstat (limited to 'src/vlib')
-rw-r--r-- | src/vlib/punt_node.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/vlib/punt_node.c b/src/vlib/punt_node.c index e341e4007cc..de721046057 100644 --- a/src/vlib/punt_node.c +++ b/src/vlib/punt_node.c @@ -120,11 +120,16 @@ punt_replicate (vlib_main_t * vm, * so there's no need to check if the to_next frame * is full */ } - *n_dispatched = *n_dispatched + n_clones0; + *n_dispatched = *n_dispatched + n_cloned0; /* The original buffer is the first clone */ next0 = punt_dp_db[pr0][0]; - *to_next[0] = bi0; + /* + * Note: the original buffer is enqueued in punt_dispatch_node. + * Don't do it here. + * + * *to_next[0] = bi0; + */ return next0; } |