Handle wrapped ThreadAbortException
authorGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Mon, 31 Jan 2011 21:34:44 +0000 (16:34 -0500)
committerGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Mon, 31 Jan 2011 21:36:53 +0000 (16:36 -0500)
Third party ProcessRequest() like the one from Razor can wrap a
ThreadAbortException originated from response.Redirect().

mcs/class/System.Web/System.Web/HttpApplication.cs

index 022817f5a4e5f7e7442178fa5a39cc7a54224dcc..feaef106205e273ee7bac844e93de86021843cc8 100644 (file)
@@ -956,7 +956,13 @@ namespace System.Web
                                stop_processing = true;
                                PipelineDone ();
                        } catch (Exception e) {
-                               ProcessError (e);
+                               ThreadAbortException inner = e.InnerException as ThreadAbortException;
+                               if (inner != null && FlagEnd.Value == inner.ExceptionState && !HttpRuntime.DomainUnloading) {
+                                       context.ClearError ();
+                                       Thread.ResetAbort ();
+                               } else {
+                                       ProcessError (e);
+                               }
                                stop_processing = true;
                                PipelineDone ();
                        }