harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rana Dasgupta (JIRA)" <j...@apache.org>
Subject [jira] Commented: (HARMONY-971) [drlvm] StackOverflowError in native code is handled inaccurately
Date Tue, 29 Aug 2006 00:27:23 GMT
    [ http://issues.apache.org/jira/browse/HARMONY-971?page=comments#action_12431103 ] 
            
Rana Dasgupta commented on HARMONY-971:
---------------------------------------

I checked this out in the debugger. The SOE exception does happen, but twice, and during the
second exception, it asserts . The first time, suspend is enabled. Since the top frame is
not unwindable, as per the design, the exception gets created and put on the stack. But due
to the tight space on windows stacks, the exception gets raised again soon after, before the
proactive checking for the exception has occurred. This time, suspension is not enabled and
it asserts as in the bug report.

We can add some code to capture exception state when suspension is disabled and check it later.
But that is not guaranteed solve problems like this where the exception happens in native
code.  The problem does not happen in RI. But I think that the RI uses a seperate stack for
native code, which is not a great thing. 

> [drlvm] StackOverflowError in native code is handled inaccurately
> -----------------------------------------------------------------
>
>                 Key: HARMONY-971
>                 URL: http://issues.apache.org/jira/browse/HARMONY-971
>             Project: Harmony
>          Issue Type: Bug
>          Components: DRLVM
>            Reporter: Alexey Varlamov
>         Assigned To: Geir Magnusson Jr
>
> On msvc debug build, the following test fails on assert(tmn_is_suspend_enabled());  exceptions.cpp:
143
> The stack trace is:
> >	vmcore.dll!create_exception(const char * exception_name=0x102932ec)  Line 143 +
0x20	C++
>  	vmcore.dll!exn_raise_by_name(const char * exception_name=0x102932ec)  Line 325 + 0x9
C++
>  	vmcore.dll!vectored_exception_handler(_EXCEPTION_POINTERS * nt_exception=0x06052c4c)
 Line 317 + 0xa	C++
>  	ntdll.dll!7c84f937() 	
> Test to reproduce:
> public class TestStackOverflow{
> 	static int i1 = 0;
> 	static int i2 = 0;
>     public static void main(String[] argv) {
>    		try {
>    			method1(0);
>    			System.err.println("Test failed: no stack overflow reported");
>    		} catch (StackOverflowError e) {
>    			System.err.println("Test passed");
> 			//System.err.println("Stack depth was = " + (i1 + i2) /*e.getStackTrace().length*/);
> 			//e.printStackTrace();
>    		} catch (Throwable t) {
>    			System.err.println("Test failed: "+t);
>    		}
>    		System.err.println("i1="+i1+" i2="+i2);
>    	}
>     	    
>    	private static void method1(int p) {
>    		
>    		System.err.print(".");
>    		method2(++i1);
>    	}
>    	private static void method2(int p) {
>    		
>    		System.err.print(",");
>    		method1(++i2);
>    	}
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message