You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2007/01/10 16:04:09 UTC

svn commit: r494838 - /harmony/enhanced/drlvm/trunk/vm/interpreter/src/interpreter.cpp

Author: gshimansky
Date: Wed Jan 10 07:04:08 2007
New Revision: 494838

URL: http://svn.apache.org/viewvc?view=rev&rev=494838
Log:
Applied HARMONY-2916 [drlvm][interpreter] Use vm stack limit instead of harcoded value

Tests passed on Ubuntu6 x86, Windows 2003 Server x86 and SuSE9 x86_64


Modified:
    harmony/enhanced/drlvm/trunk/vm/interpreter/src/interpreter.cpp

Modified: harmony/enhanced/drlvm/trunk/vm/interpreter/src/interpreter.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/interpreter/src/interpreter.cpp?view=diff&rev=494838&r1=494837&r2=494838
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/interpreter/src/interpreter.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/interpreter/src/interpreter.cpp Wed Jan 10 07:04:08 2007
@@ -2522,6 +2522,7 @@
     uint8 ip0 = 0;
     bool breakpoint_processed = false;
     int stackLength = 0;
+    size_t available;
     
     DEBUG_TRACE_PLAIN("interpreter: "
             << class_get_name(method_get_class(frame.method))
@@ -2536,14 +2537,18 @@
          goto got_exception;
     }
     assert(!hythread_is_suspend_enabled());
+
+
+
+    available = get_available_stack_size();
     
-    first = (uint8*) get_thread_ptr()->firstFrame;
-    stackLength = ((uint8*)first) - ((uint8*)&frame);
-    if (stackLength > 500000) { // FIXME: hardcoded stack limit
-        if (!(get_thread_ptr()->interpreter_state & INTERP_STATE_STACK_OVERFLOW)) {
-            get_thread_ptr()->interpreter_state |= INTERP_STATE_STACK_OVERFLOW;
+    if (available < 100000) {
+        int &state = get_thread_ptr()->interpreter_state;
+
+        if (!(state & INTERP_STATE_STACK_OVERFLOW)) {
+            state |= INTERP_STATE_STACK_OVERFLOW;
             interp_throw_exception("java/lang/StackOverflowError");
-            get_thread_ptr()->interpreter_state &= ~INTERP_STATE_STACK_OVERFLOW;
+            state &= ~INTERP_STATE_STACK_OVERFLOW;
 
             if (frame.framePopListener)
                 frame_pop_callback(frame.framePopListener, frame.method, true);