static void DoSomething(ref ByRef_GCHole p) { try { if (returnCode == 0) { Console.WriteLine(p.ToString() + "passed"); returnCode = 100; } } catch { Console.WriteLine("FAILED: Object is invalid!"); returnCode = 98; } }
static void DoSomething(ref ByRef_GCHole p) { try { if (returnCode == 0) { Console.WriteLine(p.ToString() + "passed"); returnCode = 100; } } catch { Console.WriteLine("FAILED: Object is invalid!"); returnCode = 98; } }
static int Main() { ByRef_GCHole h; // NOTE: After talking to Grant, the if else below is necessary, because a if/else is // required for the problem to occur and the jit should not know which branch // is going to be executed. That's where the volatile static int comes into play. if (returnCode == 0) { h = new ByRef_GCHole(); } else { h = null; } GC.Collect(); GC.WaitForPendingFinalizers(); DoSomething(ref h); return returnCode; }
static int Main() { ByRef_GCHole h; // NOTE: After talking to Grant, the if else below is necessary, because a if/else is // required for the problem to occur and the jit should not know which branch // is going to be executed. That's where the volatile static int comes into play. if (returnCode == 0) { h = new ByRef_GCHole(); } else { h = null; } GC.Collect(); GC.WaitForPendingFinalizers(); DoSomething(ref h); return(returnCode); }