BsonSerializer.IsTypeDiscriminated is not thread-safe

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Unresolved
    • Priority: Unknown
    • 3.4.1
    • Affects Version/s: None
    • Component/s: None
    • None
    • None
    • Dotnet Drivers
    • None
    • None
    • None
    • None
    • None
    • None

      Thread safety issue: The _discriminatedTypes field gets modified in the RegisterDiscriminator function, which leads to thread safety problems when the IsTypeDiscriminated function accesses the _discriminatedTypes container concurrently:
      ---> System.FormatException: An error occurred while deserializing the InputSettingDbs field of class InputSettingDb: An error occurred while deserializing the CombinationActions field of class OneDeviceInputSettingDb: Index was outside the bounds of the array.
       ---> System.FormatException: An error occurred while deserializing the CombinationActions field of class OneDeviceInputSettingDb: Index was outside the bounds of the array.
       ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
         at System.Collections.Generic.HashSet`1.FindItemIndex(T item)
         at System.Collections.Generic.HashSet`1.Contains(T item)
         at MongoDB.Bson.Serialization.BsonSerializer.IsTypeDiscriminated(Type type)
         at MongoDB.Bson.Serialization.Conventions.StandardDiscriminatorConvention.GetActualType(IBsonReader bsonReader, Type nominalType)
         at MongoDB.Bson.Serialization.BsonClassMapSerializer`1.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
         at MongoDB.Bson.Serialization.IBsonSerializerExtensions.Deserialize[TValue](IBsonSerializer`1 serializer, BsonDeserializationContext context)
         at MongoDB.Bson.Serialization.Serializers.EnumerableSerializerBase`2.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
         at MongoDB.Bson.Serialization.Serializers.SerializerBase`1.MongoDB.Bson.Serialization.IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
         at MongoDB.Bson.Serialization.IBsonSerializerExtensions.Deserialize(IBsonSerializer serializer, BsonDeserializationContext context)
         at MongoDB.Bson.Serialization.BsonClassMapSerializer`1.DeserializeMemberValue(BsonDeserializationContext context, BsonMemberMap memberMap)

            Assignee:
            Ferdinando Papale
            Reporter:
            gary chan
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: