vlib: mitigate outdated new cli session events
Possible races while concurrent additon to the new sessions vector
in a one process and remove from it in an another need to be avoided.
Let the vector be changed in the new session process function only.
Also cli_file_pool element may be freed already at the new session
event arrive timepoint, still causing unexpected cli banner for
noninteracive cli sessions.
Type: fix
Fixes: 17a6721858
Signed-off-by: Vladislav Grishenko <themiron@yandex-team.ru>
Change-Id: I022d16dd3aad9c9330834d35c58938f04b015b08
This commit is contained in:
committed by
Damjan Marion
parent
2973350c81
commit
49ebbf7048
@@ -1312,6 +1312,10 @@ unix_cli_new_session_process (vlib_main_t * vm, vlib_node_runtime_t * rt,
|
||||
/* Add an identifier to the new session list */
|
||||
unix_cli_new_session_t ns;
|
||||
|
||||
/* Check the connection didn't close already */
|
||||
if (pool_is_free_index (cm->cli_file_pool, event_data[0]))
|
||||
break;
|
||||
|
||||
ns.cf_index = event_data[0];
|
||||
ns.deadline = vlib_time_now (vm) + 1.0;
|
||||
|
||||
@@ -2693,7 +2697,7 @@ unix_cli_kill (unix_cli_main_t * cm, uword cli_file_index)
|
||||
|
||||
if (ns->cf_index == cli_file_index)
|
||||
{
|
||||
vec_del1 (cm->new_sessions, i);
|
||||
ns->cf_index = ~0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user