Hello,
Answers, as usual, depends on which device you are using.
1- msCAN in BOSCH mode is different to ISO mode.
One is supposed to recover after 128x11 Recessive bits whilst the other one should NEVER recover without intervention.
By putting the controller in soft reset, the user has access to the Error Counters. If the counter is above 255, it is in BUS OFF.
The simpler is still to have a state machine and detect the Bus Off with the Error Interrupt.
2- The other possibility would be to put the module in Soft Reset but it can violate the conditions on the Bus. Once the value is in TX buffers, this is the only other solution to unschedule them, as far as I know. This is because this is not how the CAN specification is supposed to be interpreted.
Cheers,
Alban.