From 104159917f4eaa7d38bfec49c90f2bb829679e9b Mon Sep 17 00:00:00 2001 From: Kevin Schoedel <67607049+kpschoedel@users.noreply.github.com> Date: Wed, 3 Nov 2021 15:33:07 -0400 Subject: [PATCH] Fix _InitChipStack() initialization order. (#11374) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### Problem `ConfigurationMgr().Init()` indirectly uses the System layer, which has not yet been initialized, in its ‘fail-safe armed’ case. Fixes #5336 TestPlatformMgr occasionally crashes on Linux #### Change overview Initialize Configuration Manager after the System layer. #### Testing Confirmed on Linux that adding `fail-safe-armed=1` to `/tmp/chip_config.ini` reliably triggers the `TestPlatformMgr` crash on master, but not after this change. Relying on CI to confirm that there are no unexpected side effects of changing the initialization order. (There should be none, since System::Layer does not depend on ConfigurationMgr.) --- .../platform/internal/GenericPlatformManagerImpl.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/include/platform/internal/GenericPlatformManagerImpl.cpp b/src/include/platform/internal/GenericPlatformManagerImpl.cpp index 28f1eb8d9ad730..1d4d53bce1eca1 100644 --- a/src/include/platform/internal/GenericPlatformManagerImpl.cpp +++ b/src/include/platform/internal/GenericPlatformManagerImpl.cpp @@ -64,18 +64,19 @@ CHIP_ERROR GenericPlatformManagerImpl::_InitChipStack() } SuccessOrExit(err); - err = ConfigurationMgr().Init(); + // Initialize the CHIP system layer. + err = SystemLayer().Init(); if (err != CHIP_NO_ERROR) { - ChipLogError(DeviceLayer, "Configuration Manager initialization failed: %s", ErrorStr(err)); + ChipLogError(DeviceLayer, "SystemLayer initialization failed: %s", ErrorStr(err)); } SuccessOrExit(err); - // Initialize the CHIP system layer. - err = SystemLayer().Init(); + // Initialize the Configuration Manager. + err = ConfigurationMgr().Init(); if (err != CHIP_NO_ERROR) { - ChipLogError(DeviceLayer, "SystemLayer initialization failed: %s", ErrorStr(err)); + ChipLogError(DeviceLayer, "Configuration Manager initialization failed: %s", ErrorStr(err)); } SuccessOrExit(err);