You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Run ./out/debug/standalone/chip-tool pairing SSID PASSWORD 112233 12345678 3840
Wait for that to complete.
Run ./out/ebug/standalone/chip-tool onoff toggle 1
(Can probably reproduce this in bypass mode too, honestly, as long as that does CASE.)
chip-tool crashes. This happens because the CASESession holds on to an exchange until its destructor, which causes it to outlive shutdown and destruction of various globals like the SessionManager. The assert about this in ExchangeManager::Shutdown never gets hit because that shutdown call is commented out in DeviceController::Shutdown. Then when we finally go to Close it, it tries to CancelResponseTimer, which does mExchangeMgr->GetSessionMgr()->SystemLayer() but the SessionManager is dead so we get a garbage pointer and crash when we dereference it.
Close the exchange in CASESession once we are done with it.
Uncomment that Shutdown call, assuming that passes CI.
See whether we can add some sort of CI for this. For example, we could run the "linux" version of all-clusters-app like Darwin CI does it and then maybe we can just run command-line chip-tool and ensure it does not crash? @vivien-apple how hard is this part to set up?
The text was updated successfully, but these errors were encountered:
Problem
Steps to reproduce:
PairingCommand::UpdateNetworkAddress
to setmFabricId = 0;
up front to work around the device advertising on the wrong fabric for now.ec->Close()
call inExchangeManager::OnConnectionExpired
to work around ExchangeManager::OnConnectionExpired is incorrectly closing exchanges, can cause lost messages or crashes #7012./gn_build.sh
to compile command-line chip-tool../out/debug/standalone/chip-tool pairing SSID PASSWORD 112233 12345678 3840
./out/ebug/standalone/chip-tool onoff toggle 1
(Can probably reproduce this in bypass mode too, honestly, as long as that does CASE.)
chip-tool
crashes. This happens because the CASESession holds on to an exchange until its destructor, which causes it to outlive shutdown and destruction of various globals like theSessionManager
. The assert about this inExchangeManager::Shutdown
never gets hit because that shutdown call is commented out inDeviceController::Shutdown
. Then when we finally go toClose
it, it tries toCancelResponseTimer
, which doesmExchangeMgr->GetSessionMgr()->SystemLayer()
but the SessionManager is dead so we get a garbage pointer and crash when we dereference it.Proposed Solution
Once #7054 lands, we should:
CASESession
once we are done with it.Shutdown
call, assuming that passes CI.The text was updated successfully, but these errors were encountered: