Merged.
authorStefan Ring <stefan@complang.tuwien.ac.at>
Mon, 20 Oct 2008 19:08:14 +0000 (21:08 +0200)
committerStefan Ring <stefan@complang.tuwien.ac.at>
Mon, 20 Oct 2008 19:08:14 +0000 (21:08 +0200)
1  2 
src/native/vm/openjdk/jvm.cpp
src/threads/thread.cpp

index 7a63880bab9f37cf002a76c0fa07959a9a75e56f,1fc609c1d168e991debbca348f2edbec4c4ec93e..1bbdd3ea40c39472427f9ac537ecbfba18d06d51
@@@ -73,7 -73,7 +73,7 @@@
  #endif
  
  #include "vm/jit/builtin.hpp"
 -#include "vm/classcache.h"
 +#include "vm/classcache.hpp"
  #include "vm/exceptions.hpp"
  #include "vm/global.h"
  #include "vm/globals.hpp"
@@@ -3358,6 -3358,24 +3358,24 @@@ jintArray JVM_GetThreadStateValues(JNIE
  /*            array_intarray_element_set(ia, 2, PARKED); */
                break; 
  
+     case THREAD_STATE_PARKED:
+               ia = builtin_newarray_int(2);
+               if (ia == NULL)
+                       return NULL;
+               array_intarray_element_set(ia, 0, THREAD_STATE_PARKED);
+               break; 
+     case THREAD_STATE_TIMED_PARKED:
+               ia = builtin_newarray_int(2);
+               if (ia == NULL)
+                       return NULL;
+               array_intarray_element_set(ia, 0, THREAD_STATE_TIMED_PARKED);
+               break; 
      case THREAD_STATE_TERMINATED:
                ia = builtin_newarray_int(1);
  
@@@ -3453,7 -3471,6 +3471,6 @@@ jobjectArray JVM_GetThreadStateNames(JN
                        return NULL;
  
                s = javastring_new(utf_new_char("WAITING.OBJECT_WAIT"));
- /*            s = javastring_new(utf_new_char("WAITING.PARKED")); */
  
                if (s == NULL)
                        return NULL;
  
  /*            s = javastring_new(utf_new_char("TIMED_WAITING.SLEEPING")); */
                s = javastring_new(utf_new_char("TIMED_WAITING.OBJECT_WAIT"));
- /*            s = javastring_new(utf_new_char("TIMED_WAITING.PARKED")); */
  
                if (s == NULL)
                        return NULL;
  /*            array_objectarray_element_set(oa, 2, s); */
                break; 
  
+     case THREAD_STATE_PARKED:
+               oa = builtin_anewarray(2, class_java_lang_String);
+               if (oa == NULL)
+                       return NULL;
+               s = javastring_new(utf_new_char("WAITING.PARKED"));
+               if (s == NULL)
+                       return NULL;
+               array_objectarray_element_set(oa, 0, s);
+ /*            array_objectarray_element_set(oa, 1, s); */
+               break; 
+     case THREAD_STATE_TIMED_PARKED:
+               oa = builtin_anewarray(3, class_java_lang_String);
+               if (oa == NULL)
+                       return NULL;
+               s = javastring_new(utf_new_char("TIMED_WAITING.PARKED"));
+               if (s == NULL)
+                       return NULL;
+               array_objectarray_element_set(oa, 0, s);
+ /*            array_objectarray_element_set(oa, 1, s); */
+               break; 
      case THREAD_STATE_TERMINATED:
                oa = builtin_anewarray(1, class_java_lang_String);
  
diff --combined src/threads/thread.cpp
index 8804f6eb55f06e37d07a6925c0c23545b1beb187,0cf22e757f0518046279f00842ff6e49b8f4a924..57f8b5c0b1c862b3c8b342d0d74c4eb8d1f5991c
@@@ -51,7 -51,7 +51,7 @@@
  #include "vm/exceptions.hpp"
  #include "vm/globals.hpp"
  #include "vm/javaobjects.hpp"
 -#include "vm/method.h"
 +#include "vm/method.hpp"
  #include "vm/options.h"
  #include "vm/string.hpp"
  #include "vm/utf8.h"
@@@ -948,6 -948,12 +948,12 @@@ void thread_print_info(threadobject *t
        case THREAD_STATE_TIMED_WAITING:
                printf(" waiting on condition");
                break;
+       case THREAD_STATE_PARKED:
+               printf(" parked");
+               break;
+       case THREAD_STATE_TIMED_PARKED:
+               printf(" timed parked");
+               break;
        case THREAD_STATE_TERMINATED:
                printf(" terminated");
                break;
@@@ -1057,6 -1063,56 +1063,56 @@@ void thread_set_state_timed_waiting(thr
  }
  
  
+ /* thread_set_state_parked *****************************************************
+    Set the current state of the given thread to THREAD_STATE_PARKED.
+    NOTE: If the thread has already terminated, don't set the state.
+          This is important for threads_detach_thread.
+ *******************************************************************************/
+ void thread_set_state_parked(threadobject *t)
+ {
+       /* Set the state inside a lock. */
+       ThreadList::lock();
+       if (t->state != THREAD_STATE_TERMINATED) {
+               t->state = THREAD_STATE_PARKED;
+               DEBUGTHREADS("is PARKED", t);
+       }
+       ThreadList::unlock();
+ }
+ /* thread_set_state_timed_parked ***********************************************
+    Set the current state of the given thread to THREAD_STATE_TIMED_PARKED.
+    NOTE: If the thread has already terminated, don't set the state.
+          This is important for threads_detach_thread.
+ *******************************************************************************/
+ void thread_set_state_timed_parked(threadobject *t)
+ {
+       /* Set the state inside a lock. */
+       ThreadList::lock();
+       if (t->state != THREAD_STATE_TERMINATED) {
+               t->state = THREAD_STATE_TIMED_PARKED;
+               DEBUGTHREADS("is TIMED_PARKED", t);
+       }
+       ThreadList::unlock();
+ }
  /* thread_set_state_terminated *************************************************
  
     Set the current state of the given thread to