Skip to content

Commit 104845c

Browse files
committed
Create a new JSON serializer instance to avoid thread-safety issues
1 parent 0d8b400 commit 104845c

File tree

3 files changed

+9
-45
lines changed

3 files changed

+9
-45
lines changed

Orleans.Providers.MongoDB.sln

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestGrainInterfaces", "libs
6969
EndProject
7070
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "TestFSharp", "libs\orleans\test\Grains\TestFSharp\TestFSharp.fsproj", "{8A652779-85EF-48E2-A639-1EED3CE2C39C}"
7171
EndProject
72-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Orleans.CodeGenerator.MSBuild.Bootstrap", "libs\orleans\src\BootstrapBuild\Orleans.CodeGenerator.MSBuild.Bootstrap\Orleans.CodeGenerator.MSBuild.Bootstrap.csproj", "{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}"
73-
EndProject
74-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Orleans.CodeGenerator.MSBuild", "libs\orleans\src\Orleans.CodeGenerator.MSBuild\Orleans.CodeGenerator.MSBuild.csproj", "{A145AFFC-E0CF-4861-AB0C-427C7670FF37}"
75-
EndProject
7672
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "TestFSharpInterfaces", "libs\orleans\test\Misc\TestFSharpInterfaces\TestFSharpInterfaces.fsproj", "{A4F61392-36A3-457C-80D0-9CDC48F5922F}"
7773
EndProject
7874
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestFSharpGrainInterfaces", "libs\orleans\test\Grains\TestFSharpGrainInterfaces\TestFSharpGrainInterfaces.csproj", "{43BD15AA-E53D-4FB5-8E04-765EC86797F5}"
@@ -505,38 +501,6 @@ Global
505501
{8A652779-85EF-48E2-A639-1EED3CE2C39C}.Release|x64.Build.0 = Release|Any CPU
506502
{8A652779-85EF-48E2-A639-1EED3CE2C39C}.Release|x86.ActiveCfg = Release|Any CPU
507503
{8A652779-85EF-48E2-A639-1EED3CE2C39C}.Release|x86.Build.0 = Release|Any CPU
508-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
509-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
510-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Debug|ARM.ActiveCfg = Debug|Any CPU
511-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Debug|ARM.Build.0 = Debug|Any CPU
512-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Debug|x64.ActiveCfg = Debug|Any CPU
513-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Debug|x64.Build.0 = Debug|Any CPU
514-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Debug|x86.ActiveCfg = Debug|Any CPU
515-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Debug|x86.Build.0 = Debug|Any CPU
516-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
517-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Release|Any CPU.Build.0 = Release|Any CPU
518-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Release|ARM.ActiveCfg = Release|Any CPU
519-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Release|ARM.Build.0 = Release|Any CPU
520-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Release|x64.ActiveCfg = Release|Any CPU
521-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Release|x64.Build.0 = Release|Any CPU
522-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Release|x86.ActiveCfg = Release|Any CPU
523-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0}.Release|x86.Build.0 = Release|Any CPU
524-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
525-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Debug|Any CPU.Build.0 = Debug|Any CPU
526-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Debug|ARM.ActiveCfg = Debug|Any CPU
527-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Debug|ARM.Build.0 = Debug|Any CPU
528-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Debug|x64.ActiveCfg = Debug|Any CPU
529-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Debug|x64.Build.0 = Debug|Any CPU
530-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Debug|x86.ActiveCfg = Debug|Any CPU
531-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Debug|x86.Build.0 = Debug|Any CPU
532-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Release|Any CPU.ActiveCfg = Release|Any CPU
533-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Release|Any CPU.Build.0 = Release|Any CPU
534-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Release|ARM.ActiveCfg = Release|Any CPU
535-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Release|ARM.Build.0 = Release|Any CPU
536-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Release|x64.ActiveCfg = Release|Any CPU
537-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Release|x64.Build.0 = Release|Any CPU
538-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Release|x86.ActiveCfg = Release|Any CPU
539-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37}.Release|x86.Build.0 = Release|Any CPU
540504
{A4F61392-36A3-457C-80D0-9CDC48F5922F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
541505
{A4F61392-36A3-457C-80D0-9CDC48F5922F}.Debug|Any CPU.Build.0 = Debug|Any CPU
542506
{A4F61392-36A3-457C-80D0-9CDC48F5922F}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -726,8 +690,6 @@ Global
726690
{0ECCC344-21E8-4AD7-9CB9-933054200000} = {00BCCB49-80FC-48E4-8A2B-89E0F6313457}
727691
{CC76035A-056B-43F3-8FFB-92DE66A19305} = {00BCCB49-80FC-48E4-8A2B-89E0F6313457}
728692
{8A652779-85EF-48E2-A639-1EED3CE2C39C} = {00BCCB49-80FC-48E4-8A2B-89E0F6313457}
729-
{7735FCC6-4D1F-4FCA-8D8F-44515EF558C0} = {00BCCB49-80FC-48E4-8A2B-89E0F6313457}
730-
{A145AFFC-E0CF-4861-AB0C-427C7670FF37} = {00BCCB49-80FC-48E4-8A2B-89E0F6313457}
731693
{A4F61392-36A3-457C-80D0-9CDC48F5922F} = {00BCCB49-80FC-48E4-8A2B-89E0F6313457}
732694
{43BD15AA-E53D-4FB5-8E04-765EC86797F5} = {00BCCB49-80FC-48E4-8A2B-89E0F6313457}
733695
{9BCF7A12-6A5B-43FF-828A-A804F9B9DBB4} = {00BCCB49-80FC-48E4-8A2B-89E0F6313457}

Orleans.Providers.MongoDB/Orleans.Providers.MongoDB.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<PackageTags>Orleans OrleansProviders MongoDB</PackageTags>
1616
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
1717
<TargetFrameworks>net8.0</TargetFrameworks>
18-
<Version>8.0.3</Version>
18+
<Version>8.0.4</Version>
1919
</PropertyGroup>
2020

2121
<ItemGroup>

Orleans.Providers.MongoDB/StorageProviders/Serializers/JsonGrainStateSerializer.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,26 @@ namespace Orleans.Providers.MongoDB.StorageProviders.Serializers
1010
{
1111
public class JsonGrainStateSerializer : IGrainStateSerializer
1212
{
13-
private readonly JsonSerializer serializer;
13+
private readonly JsonSerializerSettings _jsonSettings;
1414

1515
public JsonGrainStateSerializer(IOptions<JsonGrainStateSerializerOptions> options, IServiceProvider serviceProvider)
1616
{
17-
var jsonSettings = OrleansJsonSerializerSettings.GetDefaultSerializerSettings(serviceProvider);
18-
options.Value.ConfigureJsonSerializerSettings(jsonSettings);
19-
serializer = JsonSerializer.CreateDefault(jsonSettings);
17+
_jsonSettings = OrleansJsonSerializerSettings.GetDefaultSerializerSettings(serviceProvider);
18+
options.Value.ConfigureJsonSerializerSettings(_jsonSettings);
2019
}
2120

2221
public T Deserialize<T>(BsonValue value)
2322
{
2423
using var jsonReader = new JTokenReader(value.ToJToken());
25-
return serializer.Deserialize<T>(jsonReader);
24+
// Creating a new serializer instance to avoid thread-safety issue: https://github.com/JamesNK/Newtonsoft.Json/issues/1452
25+
var jsonSerializer = JsonSerializer.CreateDefault(_jsonSettings);
26+
return jsonSerializer.Deserialize<T>(jsonReader);
2627
}
2728

2829
public BsonValue Serialize<T>(T state)
2930
{
30-
return JObject.FromObject(state, serializer).ToBson();
31+
var jsonSerializer = JsonSerializer.CreateDefault(_jsonSettings);
32+
return JObject.FromObject(state, jsonSerializer).ToBson();
3133
}
3234
}
3335
}

0 commit comments

Comments
 (0)