diff options
author | Dave Barach <dbarach@cisco.com> | 2017-12-15 12:22:57 -0500 |
---|---|---|
committer | John Lo <loj@cisco.com> | 2017-12-15 22:32:11 +0000 |
commit | 2877eee189993dbd1b9a5c3d22499930a4768786 (patch) | |
tree | 7c106163b2595a06441c329a2781537929296bc9 /src/vlib/main.h | |
parent | 891f0a1caa795ed7799f0c6faa1cb91b4669d4da (diff) |
VPP-1102: fix dangling references in RPC handling
Queue RPC calls and send them from the main dispatch loop. As things stood,
if the vpp main input queue filled, worker threads could enter a
barrier-sync spin-wait in the middle of processing a frame. If thread
0 decided to recreate worker thread data structures, the worker thread(s)
could easily crash.
Legislate the problem out of existence by enqueueing RPC messages only
from the main dispatch loop. At that point, doing a barrier-sync wait
is perfectly OK.
Change-Id: I18da3e44bb1f29a63fe5f30cf11de732ecfd5bf7
Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'src/vlib/main.h')
-rw-r--r-- | src/vlib/main.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/vlib/main.h b/src/vlib/main.h index 4288d6f0388..28412e823a9 100644 --- a/src/vlib/main.h +++ b/src/vlib/main.h @@ -210,6 +210,9 @@ typedef struct vlib_main_t /* Earliest barrier can be closed again */ f64 barrier_no_close_before; + /* Vector of pending RPC requests */ + uword *pending_rpc_requests; + } vlib_main_t; /* Global main structure. */ |