Innanzitutto perché c'è un invalidate() nel if e uno .. fuori?
Si "pianta" ... dove? In che punto esattamente?
E comunque per poter passare in modo "pulito" ad una pagina di errore c'è un requisito importante: la response non deve essere ancora "committed".