diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm index e811579fcbd32f..d5365145da9821 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm @@ -148,9 +148,13 @@ - (void)cleanupAfterStartup - (void)shutDownCppController { if (_cppCommissioner) { - _cppCommissioner->Shutdown(); - delete _cppCommissioner; + auto * commissionerToShutDown = _cppCommissioner; + // Flag ourselves as not running before we start shutting down + // _cppCommissioner, so we're not in a state where we claim to be + // running but are actually partially shut down. _cppCommissioner = nullptr; + commissionerToShutDown->Shutdown(); + delete commissionerToShutDown; if (_operationalCredentialsDelegate != nil) { _operationalCredentialsDelegate->SetDeviceCommissioner(nullptr); }