< prev index next >

src/hotspot/share/oops/instanceKlass.cpp

Print this page
*** 818,19 ***
  class PreemptableInitCall {
    JavaThread* _thread;
    bool _previous;
    DEBUG_ONLY(InstanceKlass* _previous_klass;)
   public:
!   PreemptableInitCall(JavaThread* thread, InstanceKlass* ik) : _thread(thread) {
!     _previous = thread->at_preemptable_init();
!     _thread->set_at_preemptable_init(true);
!     DEBUG_ONLY(_previous_klass = _thread->preempt_init_klass();)
!     DEBUG_ONLY(_thread->set_preempt_init_klass(ik));
    }
    ~PreemptableInitCall() {
!     _thread->set_at_preemptable_init(_previous);
!     DEBUG_ONLY(_thread->set_preempt_init_klass(_previous_klass));
    }
  };
  
  void InstanceKlass::initialize_preemptable(TRAPS) {
    if (this->should_be_initialized()) {
--- 818,24 ---
  class PreemptableInitCall {
    JavaThread* _thread;
    bool _previous;
    DEBUG_ONLY(InstanceKlass* _previous_klass;)
   public:
!   PreemptableInitCall(JavaThread* thread, InstanceKlass* ik) : _thread(nullptr) {
!     if (thread->is_vthread_mounted()) {
!       _thread = thread;
!       _previous = _thread->at_preemptable_init();
!       _thread->set_at_preemptable_init(true);
+       DEBUG_ONLY(_previous_klass = _thread->preempt_init_klass();)
+       DEBUG_ONLY(_thread->set_preempt_init_klass(ik));
+     }
    }
    ~PreemptableInitCall() {
!     if (_thread != nullptr) {
!       _thread->set_at_preemptable_init(_previous);
+       DEBUG_ONLY(_thread->set_preempt_init_klass(_previous_klass));
+     }
    }
  };
  
  void InstanceKlass::initialize_preemptable(TRAPS) {
    if (this->should_be_initialized()) {
< prev index next >