< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page

2064   InstanceKlass* k = vmClasses::ThreadGroup_klass();
2065   THREADGROUP_FIELDS_DO(FIELD_COMPUTE_OFFSET);
2066 }
2067 
2068 #if INCLUDE_CDS
2069 void java_lang_ThreadGroup::serialize_offsets(SerializeClosure* f) {
2070   THREADGROUP_FIELDS_DO(FIELD_SERIALIZE_OFFSET);
2071 }
2072 #endif
2073 
2074 
2075 // java_lang_VirtualThread
2076 
2077 int java_lang_VirtualThread::static_vthread_scope_offset;
2078 int java_lang_VirtualThread::_carrierThread_offset;
2079 int java_lang_VirtualThread::_continuation_offset;
2080 int java_lang_VirtualThread::_state_offset;
2081 int java_lang_VirtualThread::_next_offset;
2082 int java_lang_VirtualThread::_onWaitingList_offset;
2083 int java_lang_VirtualThread::_notified_offset;

2084 int java_lang_VirtualThread::_timeout_offset;
2085 int java_lang_VirtualThread::_objectWaiter_offset;
2086 
2087 #define VTHREAD_FIELDS_DO(macro) \
2088   macro(static_vthread_scope_offset,       k, "VTHREAD_SCOPE",      continuationscope_signature, true);  \
2089   macro(_carrierThread_offset,             k, "carrierThread",      thread_signature,            false); \
2090   macro(_continuation_offset,              k, "cont",               continuation_signature,      false); \
2091   macro(_state_offset,                     k, "state",              int_signature,               false); \
2092   macro(_next_offset,                      k, "next",               vthread_signature,           false); \
2093   macro(_onWaitingList_offset,             k, "onWaitingList",      bool_signature,              false); \
2094   macro(_notified_offset,                  k, "notified",           bool_signature,              false); \

2095   macro(_timeout_offset,                   k, "timeout",            long_signature,              false);
2096 
2097 
2098 void java_lang_VirtualThread::compute_offsets() {
2099   InstanceKlass* k = vmClasses::VirtualThread_klass();
2100   VTHREAD_FIELDS_DO(FIELD_COMPUTE_OFFSET);
2101   VTHREAD_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
2102 }
2103 
2104 bool java_lang_VirtualThread::is_instance(oop obj) {
2105   return obj != nullptr && is_subclass(obj->klass());
2106 }
2107 
2108 oop java_lang_VirtualThread::carrier_thread(oop vthread) {
2109   oop thread = vthread->obj_field(_carrierThread_offset);
2110   return thread;
2111 }
2112 
2113 oop java_lang_VirtualThread::continuation(oop vthread) {
2114   oop cont = vthread->obj_field(_continuation_offset);

2144 bool java_lang_VirtualThread::set_onWaitingList(oop vthread, OopHandle& list_head) {
2145   jboolean* addr = vthread->field_addr<jboolean>(_onWaitingList_offset);
2146   jboolean vthread_on_list = Atomic::load(addr);
2147   if (!vthread_on_list) {
2148     vthread_on_list = Atomic::cmpxchg(addr, (jboolean)JNI_FALSE, (jboolean)JNI_TRUE);
2149     if (!vthread_on_list) {
2150       for (;;) {
2151         oop head = list_head.resolve();
2152         java_lang_VirtualThread::set_next(vthread, head);
2153         if (list_head.cmpxchg(head, vthread) == head) return true;
2154       }
2155     }
2156   }
2157   return false; // already on waiting list
2158 }
2159 
2160 void java_lang_VirtualThread::set_notified(oop vthread, jboolean value) {
2161   vthread->bool_field_put_volatile(_notified_offset, value);
2162 }
2163 




2164 jlong java_lang_VirtualThread::timeout(oop vthread) {
2165   return vthread->long_field(_timeout_offset);
2166 }
2167 
2168 void java_lang_VirtualThread::set_timeout(oop vthread, jlong value) {
2169   vthread->long_field_put(_timeout_offset, value);
2170 }
2171 
2172 JavaThreadStatus java_lang_VirtualThread::map_state_to_thread_status(int state) {
2173   JavaThreadStatus status = JavaThreadStatus::NEW;
2174   switch (state & ~SUSPENDED) {
2175     case NEW:
2176       status = JavaThreadStatus::NEW;
2177       break;
2178     case STARTED:
2179     case RUNNING:
2180     case PARKING:
2181     case TIMED_PARKING:
2182     case UNPARKED:
2183     case YIELDING:

2064   InstanceKlass* k = vmClasses::ThreadGroup_klass();
2065   THREADGROUP_FIELDS_DO(FIELD_COMPUTE_OFFSET);
2066 }
2067 
2068 #if INCLUDE_CDS
2069 void java_lang_ThreadGroup::serialize_offsets(SerializeClosure* f) {
2070   THREADGROUP_FIELDS_DO(FIELD_SERIALIZE_OFFSET);
2071 }
2072 #endif
2073 
2074 
2075 // java_lang_VirtualThread
2076 
2077 int java_lang_VirtualThread::static_vthread_scope_offset;
2078 int java_lang_VirtualThread::_carrierThread_offset;
2079 int java_lang_VirtualThread::_continuation_offset;
2080 int java_lang_VirtualThread::_state_offset;
2081 int java_lang_VirtualThread::_next_offset;
2082 int java_lang_VirtualThread::_onWaitingList_offset;
2083 int java_lang_VirtualThread::_notified_offset;
2084 int java_lang_VirtualThread::_interruptible_wait_offset;
2085 int java_lang_VirtualThread::_timeout_offset;
2086 int java_lang_VirtualThread::_objectWaiter_offset;
2087 
2088 #define VTHREAD_FIELDS_DO(macro) \
2089   macro(static_vthread_scope_offset,       k, "VTHREAD_SCOPE",      continuationscope_signature, true);  \
2090   macro(_carrierThread_offset,             k, "carrierThread",      thread_signature,            false); \
2091   macro(_continuation_offset,              k, "cont",               continuation_signature,      false); \
2092   macro(_state_offset,                     k, "state",              int_signature,               false); \
2093   macro(_next_offset,                      k, "next",               vthread_signature,           false); \
2094   macro(_onWaitingList_offset,             k, "onWaitingList",      bool_signature,              false); \
2095   macro(_notified_offset,                  k, "notified",           bool_signature,              false); \
2096   macro(_interruptible_wait_offset,        k, "interruptableWait",  bool_signature,              false); \
2097   macro(_timeout_offset,                   k, "timeout",            long_signature,              false);
2098 
2099 
2100 void java_lang_VirtualThread::compute_offsets() {
2101   InstanceKlass* k = vmClasses::VirtualThread_klass();
2102   VTHREAD_FIELDS_DO(FIELD_COMPUTE_OFFSET);
2103   VTHREAD_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
2104 }
2105 
2106 bool java_lang_VirtualThread::is_instance(oop obj) {
2107   return obj != nullptr && is_subclass(obj->klass());
2108 }
2109 
2110 oop java_lang_VirtualThread::carrier_thread(oop vthread) {
2111   oop thread = vthread->obj_field(_carrierThread_offset);
2112   return thread;
2113 }
2114 
2115 oop java_lang_VirtualThread::continuation(oop vthread) {
2116   oop cont = vthread->obj_field(_continuation_offset);

2146 bool java_lang_VirtualThread::set_onWaitingList(oop vthread, OopHandle& list_head) {
2147   jboolean* addr = vthread->field_addr<jboolean>(_onWaitingList_offset);
2148   jboolean vthread_on_list = Atomic::load(addr);
2149   if (!vthread_on_list) {
2150     vthread_on_list = Atomic::cmpxchg(addr, (jboolean)JNI_FALSE, (jboolean)JNI_TRUE);
2151     if (!vthread_on_list) {
2152       for (;;) {
2153         oop head = list_head.resolve();
2154         java_lang_VirtualThread::set_next(vthread, head);
2155         if (list_head.cmpxchg(head, vthread) == head) return true;
2156       }
2157     }
2158   }
2159   return false; // already on waiting list
2160 }
2161 
2162 void java_lang_VirtualThread::set_notified(oop vthread, jboolean value) {
2163   vthread->bool_field_put_volatile(_notified_offset, value);
2164 }
2165 
2166 void java_lang_VirtualThread::set_interruptible_wait(oop vthread, jboolean value) {
2167   vthread->bool_field_put_volatile(_interruptible_wait_offset, value);
2168 }
2169 
2170 jlong java_lang_VirtualThread::timeout(oop vthread) {
2171   return vthread->long_field(_timeout_offset);
2172 }
2173 
2174 void java_lang_VirtualThread::set_timeout(oop vthread, jlong value) {
2175   vthread->long_field_put(_timeout_offset, value);
2176 }
2177 
2178 JavaThreadStatus java_lang_VirtualThread::map_state_to_thread_status(int state) {
2179   JavaThreadStatus status = JavaThreadStatus::NEW;
2180   switch (state & ~SUSPENDED) {
2181     case NEW:
2182       status = JavaThreadStatus::NEW;
2183       break;
2184     case STARTED:
2185     case RUNNING:
2186     case PARKING:
2187     case TIMED_PARKING:
2188     case UNPARKED:
2189     case YIELDING:
< prev index next >