< prev index next >

src/hotspot/share/runtime/objectMonitor.hpp

Print this page
*** 54,10 ***
--- 54,11 ---
    volatile TStates TState;
    volatile bool _notified;
    bool           _is_wait;
    bool        _at_reenter;
    bool       _interrupted;
+   bool     _interruptible;
    bool     _do_timed_park;
    bool            _active;    // Contention monitoring is enabled
   public:
    ObjectWaiter(JavaThread* current);
    ObjectWaiter(oop vthread, ObjectMonitor* mon);

*** 200,14 ***
--- 201,16 ---
                                      // along with other fields to determine if an ObjectMonitor can be
                                      // deflated. It is also used by the async deflation protocol. See
                                      // ObjectMonitor::deflate_monitor().
    int64_t _unmounted_vthreads;      // Number of nodes in the _entry_list associated with unmounted vthreads.
                                      // It might be temporarily more than the actual number but never less.
+   OopHandle _object_strong;         // Used to protect object during preemption on class initialization
  
    ObjectWaiter* volatile _wait_set; // LL of threads waiting on the monitor - wait()
    volatile int  _waiters;           // number of waiting threads
    volatile int _wait_set_lock;      // protects wait set queue - simple spinlock
+   volatile int _object_strong_lock; // protects setting of _object_strong
  
   public:
  
    static void Initialize();
    static void Initialize2();

*** 343,10 ***
--- 346,11 ---
  
    oop       object() const;
    oop       object_peek() const;
    bool      object_is_dead() const;
    bool      object_refers_to(oop obj) const;
+   void      set_object_strong();
  
    // Returns true if the specified thread owns the ObjectMonitor. Otherwise
    // returns false and throws IllegalMonitorStateException (IMSE).
    bool      check_owner(TRAPS);
  

*** 405,11 ***
    void      entry_list_build_dll(JavaThread* current);
    void      unlink_after_acquire(JavaThread* current, ObjectWaiter* current_node);
    ObjectWaiter* entry_list_tail(JavaThread* current);
  
    bool      vthread_monitor_enter(JavaThread* current, ObjectWaiter* node = nullptr);
!   void      vthread_wait(JavaThread* current, jlong millis);
    bool      vthread_wait_reenter(JavaThread* current, ObjectWaiter* node, ContinuationWrapper& cont);
    void      vthread_epilog(JavaThread* current, ObjectWaiter* node);
  
    enum class TryLockResult { Interference = -1, HasOwner = 0, Success = 1 };
  
--- 409,11 ---
    void      entry_list_build_dll(JavaThread* current);
    void      unlink_after_acquire(JavaThread* current, ObjectWaiter* current_node);
    ObjectWaiter* entry_list_tail(JavaThread* current);
  
    bool      vthread_monitor_enter(JavaThread* current, ObjectWaiter* node = nullptr);
!   void      vthread_wait(JavaThread* current, jlong millis, bool interruptible);
    bool      vthread_wait_reenter(JavaThread* current, ObjectWaiter* node, ContinuationWrapper& cont);
    void      vthread_epilog(JavaThread* current, ObjectWaiter* node);
  
    enum class TryLockResult { Interference = -1, HasOwner = 0, Success = 1 };
  
< prev index next >