Conversation
…okeUtil.Exec Agent-Logs-Url: https://github.com/dotnet/roslyn/sessions/673c28d8-d3e5-490d-b4e2-caff66247118 Co-authored-by: jaredpar <146967+jaredpar@users.noreply.github.com>
|
@RikkiGibson, @333fred, @jjonescz PTAL In another PR I hit a flaky failure in this test method. Decided to see what CCA could do with it and gave it the following prompt: Was really curious if it could reason out a race condition around |
RikkiGibson
left a comment
There was a problem hiding this comment.
LGTM, just had another conversation going on while I was in the middle of looking up AssertEx.cs.
|
heads up that I saw this again for a build on commit 93224f2. I branched this off of main today so I think I have the fix from this PR. I have a branch on the side where I'm trying to solve. Have to focus on other things for now though. I am wondering if we should, instead of asserting that entire state of the world remains exactly the same before/after, just ensure that assemblies that are "part of the fixture" are not leaking in. As it seems like any work occurring ambiently in the process could perhaps cause new assemblies to be loaded in this context or the default context over time. |
I think this test should do its work in isolation, i.e. in an environment where other tests cannot interfere. And it should not be snapshotting assemblies loaded in the current test process. Perhaps it should execute the scenario in a separate process. |
InvokeUtil.ExecsnapshotsCompilerLoadContext.Assembliesbefore running the test, then asserts the set is unchanged afterward.AssertExhas static fields that lazily initialize DiffPlex on first use; when that first use fell between the snapshot and the final comparison, DiffPlex (andMicrosoft.Win32.Registryas anetstandard2.0compat shim on .NET 10) appeared only in the post-test list, failing theSetEqualcheck. OnlyLoadStreamwas affected because the other variants ran in process contexts where a prior test had already triggeredAssertExinitialization.Changes
InvokeUtil.cs: CallRuntimeHelpers.RunClassConstructor(typeof(AssertEx).TypeHandle)before taking thecompilerContextAssembliessnapshot, ensuring DiffPlex and any compat-shim assemblies it pulls in are already present in both sides of the comparison.Microsoft Reviewers: Open in CodeFlow