Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit b1d2c93

Browse files
committed
Wrap entire GetFieldDefinitionMap impl in a lock
1 parent 30b3552 commit b1d2c93

File tree

1 file changed

+10
-12
lines changed

1 file changed

+10
-12
lines changed

src/ServiceStack.OrmLite/ModelDefinition.cs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -96,24 +96,22 @@ public FieldDefinition[] AllFieldDefinitionsArray
9696
private readonly object fieldDefLock = new object();
9797
private Dictionary<string, FieldDefinition> fieldDefinitionMap;
9898
private Func<string, string> fieldNameSanitizer;
99+
99100
public Dictionary<string, FieldDefinition> GetFieldDefinitionMap(Func<string, string> sanitizeFieldName)
100101
{
101-
if (fieldDefinitionMap == null || fieldNameSanitizer != sanitizeFieldName)
102+
lock (fieldDefLock)
102103
{
103-
lock (fieldDefLock)
104+
if (fieldDefinitionMap != null && fieldNameSanitizer == sanitizeFieldName)
105+
return fieldDefinitionMap;
106+
107+
fieldDefinitionMap = new Dictionary<string, FieldDefinition>(StringComparer.OrdinalIgnoreCase);
108+
fieldNameSanitizer = sanitizeFieldName;
109+
foreach (var fieldDef in FieldDefinitionsArray)
104110
{
105-
if (fieldDefinitionMap == null || fieldNameSanitizer != sanitizeFieldName)
106-
{
107-
fieldDefinitionMap = new Dictionary<string, FieldDefinition>(StringComparer.OrdinalIgnoreCase);
108-
fieldNameSanitizer = sanitizeFieldName;
109-
foreach (var fieldDef in FieldDefinitionsArray)
110-
{
111-
fieldDefinitionMap[sanitizeFieldName(fieldDef.FieldName)] = fieldDef;
112-
}
113-
}
111+
fieldDefinitionMap[sanitizeFieldName(fieldDef.FieldName)] = fieldDef;
114112
}
113+
return fieldDefinitionMap;
115114
}
116-
return fieldDefinitionMap;
117115
}
118116

119117
public List<CompositeIndexAttribute> CompositeIndexes { get; set; }

0 commit comments

Comments
 (0)