[Mono-dev] SIGILL in finally clause without catch

Christian Stümpel mail at christian-stuempel.de
Tue Apr 22 18:14:27 EDT 2008

In code I have to port from MS .NET to mono I observed several SIGILL  
crashes at points in code, where calls to external code are made  
within a try block followed by a finally but *without* a catch  

		try {
			throw new Exception("test");

		// no catch here

			unrar.close(); // calls unmanaged code

The unmanaged code called in unrar.dosomething() is C++ code compiled  
with exceptions enabled but it does not throw the exception, but the  
managed code that follows. The call to unrar.close() (which does not  
throw any exception) in the finally clause crashes with:

System.ExecutionEngineException: SIGILL
   at (wrapper managed-to-native)  
NntpApp.nntp.rar.Unrar:RARCloseArchive (intptr)
   at NntpApp.nntp.rar.Unrar.Close () [0x00000]
   at usenextapp.FilegroupPreview.ExtractFileFromRar (System.String  
path) [0x00000]

The SIGILL does not appear if I catch the exception and rethrow it in  
the finally clause

		Exception e=null;
		try {
			throw new Exception("test");

		catch(Exception ex)
			e= ex;

			if (e!=null)
				throw e;

Any thoughts on that?

Christian Stümpel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20080422/58f90750/attachment.html 

More information about the Mono-devel-list mailing list