diff --git a/src/ExpressionEvaluator/Core/Source/ExpressionCompiler/DkmUtilities.cs b/src/ExpressionEvaluator/Core/Source/ExpressionCompiler/DkmUtilities.cs index 2916d8fe01474c4df18f15b1a27acddceec3f05d..77a980064c5b1671b19bac9ba5a30c2a2ea1be6c 100644 --- a/src/ExpressionEvaluator/Core/Source/ExpressionCompiler/DkmUtilities.cs +++ b/src/ExpressionEvaluator/Core/Source/ExpressionCompiler/DkmUtilities.cs @@ -49,6 +49,13 @@ private static IEnumerable GetModulesInAppDomain(this DkmC DkmClrAppDomain appDomain, ImmutableArray previousMetadataBlocks) { + // Add a dummy data item to the appdomain to add it to the disposal queue when the debugged process is shutting down. + // This should prevent from attempts to use the Metadata pointer for dead debugged processes. + if (appDomain.GetDataItem() == null) + { + appDomain.SetDataItem(DkmDataCreationDisposition.CreateNew, new AppDomainLifetimeDataItem()); + } + var builder = ArrayBuilder.GetInstance(); IntPtr ptr; uint size; @@ -324,5 +331,7 @@ internal MetadataContextItem(TMetadataContext metadataContext) this.MetadataContext = metadataContext; } } + + private sealed class AppDomainLifetimeDataItem : DkmDataItem { } } }