From 3a52a991648b736ebe6bd348d3ac4db570970bc6 Mon Sep 17 00:00:00 2001 From: Tim Haasdyk Date: Tue, 5 May 2026 12:21:32 +0200 Subject: [PATCH] Fix LcmMetaDataCache race condition on static Flid counter --- .../Infrastructure/Impl/LcmMetaDataCache.cs | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/SIL.LCModel/Infrastructure/Impl/LcmMetaDataCache.cs b/src/SIL.LCModel/Infrastructure/Impl/LcmMetaDataCache.cs index c2646c2b..b1e6886b 100644 --- a/src/SIL.LCModel/Infrastructure/Impl/LcmMetaDataCache.cs +++ b/src/SIL.LCModel/Infrastructure/Impl/LcmMetaDataCache.cs @@ -69,25 +69,29 @@ internal sealed class LcmMetaDataCache : IFwMetaDataCacheManaged, IFwMetaDataCac #endregion Data Members for IFwMetaDataCache Support #region Construction + private static readonly object s_constructorLock = new object(); /// /// Constructor. /// internal LcmMetaDataCache() { - m_initialized = false; + lock (s_constructorLock) + { + m_initialized = false; - // Reset static counters for attrs. - VirtualPropertyAttribute.ResetFlidCounter(); - FieldDescription.ClearDataAbout(); + // Reset static counters for attrs. + VirtualPropertyAttribute.ResetFlidCounter(); + FieldDescription.ClearDataAbout(); - var cmObjectTypesBaseFirst = CmObjectTypesBaseFirst(); + var cmObjectTypesBaseFirst = CmObjectTypesBaseFirst(); - CmObjectSurrogate.InitializeConstructors(cmObjectTypesBaseFirst); + CmObjectSurrogate.InitializeConstructors(cmObjectTypesBaseFirst); - InitializeMetaDataCache(cmObjectTypesBaseFirst); + InitializeMetaDataCache(cmObjectTypesBaseFirst); - m_initialized = true; + m_initialized = true; + } } ///