diff options
author | Chris Luke <chrisy@flirble.org> | 2019-07-09 23:33:30 -0400 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2019-07-10 19:05:50 +0000 |
commit | 6a3a4f7340bdc687814d7905ef1e4ca1a3b02d57 (patch) | |
tree | d4a21d0f2c1840db6caf1eb077cbf12d3665501d /src/vlib/unix/input.c | |
parent | e5a7d597782a8fc10819607e21a0d5a901343cf9 (diff) |
vlib: Replace timer in CLI with an event process
The CLI code, when it accepts a socket connection, ran a timer
for each session that would ensure the CLI session was started
should the TELNET negotiation stage fail to complete.
It has since transpired that this is unsafe; the timer is capable
of firing in critical sections, during a spinlock, and since we
peform non-trivial things in the handler it can cause a deadlock.
This was reported recently in VPP-1711 but a search of history
suggests this may also be (one of) the causes in VPP-1413.
This change replaces that method with an event-driven process.
The process is created when the first socket connection is
accepted.
When new connections are created the process is sent an event
to register the new session in a list. That event process has
a loop that evaluates the list of oustanding sessions and if
a deadline expires, their session is started if it has not been
already, and then removed from the list.
If we have pending sessions then the loop waits on a timer or an
event; if there are no sessions it waits on events only.
Type: fix
Ticket: VPP-1711
Change-Id: I8c6093b7d0fc1bea0eb790032ed282a0ca169194
Signed-off-by: Chris Luke <chrisy@flirble.org>
Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'src/vlib/unix/input.c')
0 files changed, 0 insertions, 0 deletions