public void Undo()
{
if (currEC == null)
{
return; // mutiple Undo()s called on this switcher object
}
if (currEC != Thread.CurrentThread.GetExecutionContextNoCreate())
System.Environment.FailFast(Environment.GetResourceString("InvalidOperation_SwitcherCtxMismatch"));
BCLDebug.Assert(currEC != null, " ExecutionContext can't be null");
BCLDebug.Assert(currSC != null, " SecurityContext can't be null");
if ( currSC != currEC.SecurityContext) {
System.Environment.FailFast(Environment.GetResourceString("InvalidOperation_SwitcherCtxMismatch"));
}
// restore the saved security context
currEC.SecurityContext = prevSC;
currEC = null; // this will prevent the switcher object being used again
bool bNoException = true;
bNoException &= cssw.UndoNoThrow();
if (!bNoException)
{
// Failfast since we can't continue safely...
System.Environment.FailFast(Environment.GetResourceString("ExecutionContext_UndoFailed"));
}
}
}