PR# 15273 System with several rescue clauses that violates precondition goes into infinite loop

Problem Report Summary
Submitter: prestoat2000
Category: EiffelBase
Priority: High
Date: 2009/01/14
Class: Bug
Severity: Critical
Number: 15273
Release: 6.3.76070
Confidential: No
Status: Closed
Responsible:
Environment: Mozilla/5.0 (X11; U; SunOS sun4u; en-US; rv:1.8.1.13) Gecko/20080328 Firefox/2.0.0.13 Solaris 10 on SPARC
Synopsis: System with several rescue clauses that violates precondition goes into infinite loop

Description
A particular system has precondition checking enabled for all classes, including
classes of EiffelBase.  The system includes several routines with rescue
clauses but only the root creation procedure has a retry.  The system compiles
fine but when executed it goes into an infinite loop (when code is melted,
frozen or finalized - doesn't matter).  The infinite loop consumes CPU but
memory size appears to be stable.

Added eweasel test except033 for this bug.  The test is currently marked "skip"
in the catalog since the test will never finish due to the infinite loop.

This is a very serious bug for us, because we run several of our most critical
systems finalized but with all preconditions on (undetected errors can 
potentially be *very* expensive if something gets fabricated incorrectly, so
we're fairly paranoid about error checking for some systems).

If there is a small set of EiffelBase classes for which disabling precondition
checking will prevent the problem, this might be an acceptable workaround.

To Reproduce
Run eweasel test except033 (after removing the "skip" tag in the catalog).
Problem Report Interactions
From:ted_eiffel    Date:2009/01/18    Status: Closed    Download   
This has been fixed in the repository. (elks rev#264)

From:ted_eiffel    Date:2009/01/15    Status: Analyzed    Download   
Thanks for the report, David. This is indeed a problem in `is_throwing'. I will soon commit the fix as long as tests run through. 

From:prestoat2000    Date:2009/01/14    Download   
I finalized the test case I previously provided and used dbx to discover that
the infinite loop appears to be in {EXCEPTION}.is_throwing.