Strange OutOfMemory exceptions on Linux ppc64le

Open
#110,487 8 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
csharp

Research direction

Start with the referenced GitHub Actions job on Fedora 41 ppc64le under .NET 9.0, compare the report with issue #86069, and trace the stack through JsonDataSerializer.cs, TestRequestHandler.cs, and DefaultTestPlatformContractResolver.cs. Done means reproducing the failure and verifying a fix for the OutOfMemoryException in this serialization path.

Written by the indexing model from the issue text.

Description

arch-ppc64le area-VM-meta-mono

Hi there,

This issue probably connected with #86069. The virtual machine on POWER9 works properly on my tests, BUT I got a ton of same errors on QEMU x64 with Fedora 41 ppc64le + .NET 9.0 ppc64le. Please see https://github.com/JetBrains/format-ripper/actions/runs/12204385970/job/34049372306

// cc @alhad-deshpande

System.OutOfMemoryException: Insufficient memory to continue the execution of the program.
   at System.Collections.Hashtable.rehash(Int32 newsize)
   at System.Collections.Hashtable.expand()
   at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
   at System.Collections.Hashtable.set_Item(Object key, Object value)
   at System.ComponentModel.ReflectTypeDescriptionProvider.ReflectGetAttributes(Type type)
   at System.ComponentModel.ReflectTypeDescriptionProvider.ReflectedTypeData.GetAttributes()
   at System.ComponentModel.ReflectTypeDescriptionProvider.GetAttributes(Type type)
   at System.ComponentModel.TypeDescriptor.DefaultTypeDescriptor.GetAttributes()
   at System.ComponentModel.TypeDescriptor.GetAttributes(Type componentType)
   at System.ComponentModel.ReflectTypeDescriptionProvider.ReflectedTypeData.GetAttributes()
   at System.ComponentModel.ReflectTypeDescriptionProvider.GetAttributes(Type type)
   at System.ComponentModel.TypeDescriptor.DefaultTypeDescriptor.GetAttributes()
   at System.ComponentModel.TypeDescriptor.GetAttributes(Type componentType)
   at System.ComponentModel.ReflectTypeDescriptionProvider.ReflectedTypeData.GetConverter(Object instance, Boolean verifyIsRegisteredType)
   at System.ComponentModel.ReflectTypeDescriptionProvider.GetConverter(Type type, Object instance)
   at System.ComponentModel.TypeDescriptor.DefaultTypeDescriptor.GetConverter()
   at System.ComponentModel.TypeDescriptor.GetConverter(Type type)
   at Newtonsoft.Json.Serialization.JsonTypeReflector.CanTypeDescriptorConvertString(Type type, TypeConverter& typeConverter)
   at Newtonsoft.Json.Serialization.DefaultContractResolver.CanConvertToString(Type type)
   at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(Type objectType)
   at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.Serialization.DefaultTestPlatformContractResolver.CreateContract(Type objectType) in /_/src/Microsoft.TestPlatform.CommunicationUtilities/Serialization/DefaultTestPlatformContractResolver.cs:line 22
   at System.Collections.Concurrent.ConcurrentDictionary`2[[System.Type, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Newtonsoft.Json.Serialization.JsonContract, Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed]].GetOrAdd(Type key, Func`2 valueFactory)
   at Newtonsoft.Json.Utilities.ThreadSafeStore`2[[System.Type, System.Private.CoreLib, Version=9.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Newtonsoft.Json.Serialization.JsonContract, Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed]].Get(Type key)
   at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(Type type)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.GetContract(Object value)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.GetContractSafe(Object value)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
   at Newtonsoft.Json.Serialization.JsonSerializerProxy.SerializeInternal(JsonWriter jsonWriter, Object value, Type rootType)
   at Newtonsoft.Json.JsonSerializer.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
   at Newtonsoft.Json.Converters.KeyValuePairConverter.WriteJson(JsonWriter writer, Object value, JsonSerializer serializer)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeConvertable(JsonWriter writer, JsonConverter converter, Object value, JsonContract contract, JsonContainerContract collectionContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
   at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
   at Newtonsoft.Json.JsonSerializer.Serialize(JsonWriter jsonWriter, Object value)
   at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.JsonDataSerializer.Serialize[VersionedMessageForSerialization](JsonSerializer serializer, VersionedMessageForSerialization data) in /_/src/Microsoft.TestPlatform.CommunicationUtilities/JsonDataSerializer.cs:line 433
   at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.JsonDataSerializer.SerializePayload(String messageType, Object payload, Int32 version) in /_/src/Microsoft.TestPlatform.CommunicationUtilities/JsonDataSerializer.cs:line 391
   at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.TestRequestHandler.SendTestRunStatistics(TestRunChangedEventArgs testRunChangedArgs) in /_/src/Microsoft.TestPlatform.CrossPlatEngine/EventHandlers/TestRequestHandler.cs:line 196
   at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.EventHandlers.TestRunEventsHandler.HandleTestRunStatsChange(TestRunChangedEventArgs testRunChangedArgs) in /_/src/Microsoft.TestPlatform.CommunicationUtilities/EventHandlers/TestRunEventsHandler.cs:line 38
   at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Execution.BaseRunTests.OnCacheHit(TestRunStatistics testRunStats, ICollection`1 results, ICollection`1 inProgressTestCases) in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Execution/BaseRunTests.cs:line 666
   at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Execution.TestRunCache.SendResults() in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Execution/TestRunCache.cs:line 339
   at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Execution.TestRunCache.CheckForCacheHit() in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Execution/TestRunCache.cs:line 320
   at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Execution.TestRunCache.OnTestStarted(TestCase testCase) in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Execution/TestRunCache.cs:line 192
   at Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Adapter.TestExecutionRecorder.RecordStart(TestCase testCase) in /_/src/Microsoft.TestPlatform.CrossPlatEngine/Adapter/TestExecutionRecorder.cs:line 72
   at NUnit.VisualStudio.TestAdapter.NUnitEventListener.TestStarted(INUnitTestEventStartTest testNode) in C:\repos\nunit\nunit3-vs-adapter\src\NUnitTestAdapter\NUnitEventListener.cs:line 141
   at NUnit.VisualStudio.TestAdapter.NUnitEventListener.OnTestEvent(String report) in C:\repos\nunit\nunit3-vs-adapter\src\NUnitTestAdapter\NUnitEventListener.cs:line 81
Dominant language
C#
Stars
18.3k
Forks
5.6k
PR merge metrics
PR metrics pending

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from dotnet/runtime

All issues in dotnet/runtime

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.