diff options
author | Elias Rudberg <elias.rudberg@bahnhof.net> | 2020-05-07 14:29:21 +0200 |
---|---|---|
committer | Elias Rudberg <elias.rudberg@bahnhof.net> | 2020-05-07 14:29:21 +0200 |
commit | 92e1b83a39458f98ff649883334b153f03af603b (patch) | |
tree | fe7a6accac254a3151081b5fccc27c7933d9e273 /src/plugins/lacp/rx_machine.c | |
parent | a1e03d4da71a2452c1e5da399d96c51f1b487cad (diff) |
lacp: fix regarding vm arg for vlib_time_now calls
Use thread-specific vlib_main_t *vm pointers to avoid problems with
different threads accessing the same vlib_main_t data structure.
This avoids assertion failure when vlib_time_now() is called with a vm
corresponding to a different thread.
Type: fix
Signed-off-by: Elias Rudberg <elias.rudberg@bahnhof.net>
Change-Id: I359596ecff86e03d57aa8d2330f77bf9a913485f
Diffstat (limited to 'src/plugins/lacp/rx_machine.c')
-rw-r--r-- | src/plugins/lacp/rx_machine.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/src/plugins/lacp/rx_machine.c b/src/plugins/lacp/rx_machine.c index 0d9d703ff42..605cccba08c 100644 --- a/src/plugins/lacp/rx_machine.c +++ b/src/plugins/lacp/rx_machine.c @@ -174,7 +174,6 @@ lacp_update_ntt (vlib_main_t * vm, slave_if_t * sif) lacp_pdu_t *lacpdu = (lacp_pdu_t *) sif->last_rx_pkt; u8 states = LACP_STATE_LACP_ACTIVITY | LACP_STATE_LACP_TIMEOUT | LACP_STATE_SYNCHRONIZATION | LACP_STATE_AGGREGATION; - lacp_main_t *lm = &lacp_main; if ((states & lacpdu->partner.port_info.state) != (states & sif->actor.state) @@ -182,7 +181,7 @@ lacp_update_ntt (vlib_main_t * vm, slave_if_t * sif) sizeof (sif->actor) - sizeof (sif->actor.state))) { sif->ntt = 1; - lacp_start_periodic_timer (lm->vlib_main, sif, 0); + lacp_start_periodic_timer (vm, sif, 0); } } @@ -285,17 +284,16 @@ lacp_rx_action_expired (void *p1, void *p2) vlib_main_t *vm = p1; slave_if_t *sif = p2; u8 timer_expired; - lacp_main_t *lm = &lacp_main; sif->partner.state &= ~LACP_STATE_SYNCHRONIZATION; sif->partner.state |= LACP_STATE_LACP_TIMEOUT; lacp_ptx_post_short_timeout_event (vm, sif); if (lacp_timer_is_running (sif->current_while_timer) && - lacp_timer_is_expired (lm->vlib_main, sif->current_while_timer)) + lacp_timer_is_expired (vm, sif->current_while_timer)) timer_expired = 1; else timer_expired = 0; - lacp_start_current_while_timer (lm->vlib_main, sif, sif->ttl_in_seconds); + lacp_start_current_while_timer (vm, sif, sif->ttl_in_seconds); sif->actor.state |= LACP_STATE_EXPIRED; if (timer_expired) lacp_machine_dispatch (&lacp_rx_machine, vm, sif, @@ -365,12 +363,11 @@ lacp_rx_action_current (void *p1, void *p2) { vlib_main_t *vm = p1; slave_if_t *sif = p2; - lacp_main_t *lm = &lacp_main; lacp_update_selected (vm, sif); lacp_update_ntt (vm, sif); lacp_record_pdu (vm, sif); - lacp_start_current_while_timer (lm->vlib_main, sif, sif->ttl_in_seconds); + lacp_start_current_while_timer (vm, sif, sif->ttl_in_seconds); sif->actor.state &= ~LACP_STATE_EXPIRED; if (lacp_port_is_moved (vm, sif)) lacp_set_port_moved (vm, sif, 1); |