#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"
/* 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);
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);
#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"
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;
}
+ /* 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