Fix initialization of device instance info providers on POSIX. (#21259)
GenericConfigurationManagerImpl::Init sets up a generic device
instance info provider, which was overriding the platform-specific
ones that were being set in various places.
Fixes https://github.com/project-chip/connectedhomeip/issues/21139
diff --git a/src/platform/Darwin/PlatformManagerImpl.cpp b/src/platform/Darwin/PlatformManagerImpl.cpp
index 8ce02ec..e883f31 100644
--- a/src/platform/Darwin/PlatformManagerImpl.cpp
+++ b/src/platform/Darwin/PlatformManagerImpl.cpp
@@ -50,7 +50,6 @@
#if !CHIP_DISABLE_PLATFORM_KVS
err = Internal::PosixConfig::Init();
SuccessOrExit(err);
- SetDeviceInstanceInfoProvider(&DeviceInstanceInfoProviderMgrImpl());
#endif // CHIP_DISABLE_PLATFORM_KVS
mRunLoopSem = dispatch_semaphore_create(0);
@@ -63,6 +62,12 @@
err = Internal::GenericPlatformManagerImpl<PlatformManagerImpl>::_InitChipStack();
SuccessOrExit(err);
+#if !CHIP_DISABLE_PLATFORM_KVS
+ // Now set up our device instance info provider. We couldn't do that
+ // earlier, because the generic implementation sets a generic one.
+ SetDeviceInstanceInfoProvider(&DeviceInstanceInfoProviderMgrImpl());
+#endif // CHIP_DISABLE_PLATFORM_KVS
+
mStartTime = System::SystemClock().GetMonotonicTimestamp();
static_cast<System::LayerSocketsLoop &>(DeviceLayer::SystemLayer()).SetDispatchQueue(GetWorkQueue());
diff --git a/src/platform/Linux/PlatformManagerImpl.cpp b/src/platform/Linux/PlatformManagerImpl.cpp
index 542e469..d92203a 100644
--- a/src/platform/Linux/PlatformManagerImpl.cpp
+++ b/src/platform/Linux/PlatformManagerImpl.cpp
@@ -175,12 +175,15 @@
// Initialize the configuration system.
ReturnErrorOnFailure(Internal::PosixConfig::Init());
- SetDeviceInstanceInfoProvider(&DeviceInstanceInfoProviderMgrImpl());
// Call _InitChipStack() on the generic implementation base class
// to finish the initialization process.
ReturnErrorOnFailure(Internal::GenericPlatformManagerImpl_POSIX<PlatformManagerImpl>::_InitChipStack());
+ // Now set up our device instance info provider. We couldn't do that
+ // earlier, because the generic implementation sets a generic one.
+ SetDeviceInstanceInfoProvider(&DeviceInstanceInfoProviderMgrImpl());
+
mStartTime = System::SystemClock().GetMonotonicTimestamp();
return CHIP_NO_ERROR;
diff --git a/src/platform/Tizen/PlatformManagerImpl.cpp b/src/platform/Tizen/PlatformManagerImpl.cpp
index 5e0eb62..cc36d91 100644
--- a/src/platform/Tizen/PlatformManagerImpl.cpp
+++ b/src/platform/Tizen/PlatformManagerImpl.cpp
@@ -39,9 +39,14 @@
CHIP_ERROR PlatformManagerImpl::_InitChipStack(void)
{
ReturnErrorOnFailure(Internal::PosixConfig::Init());
+
+ ReturnErrorOnFailure(Internal::GenericPlatformManagerImpl_POSIX<PlatformManagerImpl>::_InitChipStack());
+
+ // Now set up our device instance info provider. We couldn't do that
+ // earlier, because the generic implementation sets a generic one.
SetDeviceInstanceInfoProvider(&DeviceInstanceInfoProviderMgrImpl());
- return Internal::GenericPlatformManagerImpl_POSIX<PlatformManagerImpl>::_InitChipStack();
+ return CHIP_NO_ERROR;
}
} // namespace DeviceLayer
diff --git a/src/platform/android/PlatformManagerImpl.cpp b/src/platform/android/PlatformManagerImpl.cpp
index d2c2fc3..4a6211b 100644
--- a/src/platform/android/PlatformManagerImpl.cpp
+++ b/src/platform/android/PlatformManagerImpl.cpp
@@ -46,13 +46,16 @@
// Initialize the configuration system.
err = Internal::AndroidConfig::Init();
SuccessOrExit(err);
- SetDeviceInstanceInfoProvider(&DeviceInstanceInfoProviderMgrImpl());
// Call _InitChipStack() on the generic implementation base class
// to finish the initialization process.
err = Internal::GenericPlatformManagerImpl_POSIX<PlatformManagerImpl>::_InitChipStack();
SuccessOrExit(err);
+ // Now set up our device instance info provider. We couldn't do that
+ // earlier, because the generic implementation sets a generic one.
+ SetDeviceInstanceInfoProvider(&DeviceInstanceInfoProviderMgrImpl());
+
exit:
return err;
}
diff --git a/src/platform/webos/PlatformManagerImpl.cpp b/src/platform/webos/PlatformManagerImpl.cpp
index 3debd6f..299c62d 100644
--- a/src/platform/webos/PlatformManagerImpl.cpp
+++ b/src/platform/webos/PlatformManagerImpl.cpp
@@ -164,12 +164,15 @@
// Initialize the configuration system.
ReturnErrorOnFailure(Internal::PosixConfig::Init());
- SetDeviceInstanceInfoProvider(&DeviceInstanceInfoProviderMgrImpl());
// Call _InitChipStack() on the generic implementation base class
// to finish the initialization process.
ReturnErrorOnFailure(Internal::GenericPlatformManagerImpl_POSIX<PlatformManagerImpl>::_InitChipStack());
+ // Now set up our device instance info provider. We couldn't do that
+ // earlier, because the generic implementation sets a generic one.
+ SetDeviceInstanceInfoProvider(&DeviceInstanceInfoProviderMgrImpl());
+
mStartTime = System::SystemClock().GetMonotonicTimestamp();
return CHIP_NO_ERROR;