< prev index next >

src/hotspot/share/runtime/objectMonitor.hpp

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

@@ -197,10 +198,12 @@
  
    int _contentions;                 // Number of active contentions in enter(). It is used by is_busy()
                                      // 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.
  
    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
  

@@ -330,10 +333,13 @@
    int       contentions() const;
    void      add_to_contentions(int value);
    intx      recursions() const                                         { return _recursions; }
    void      set_recursions(size_t recursions);
    void      increment_recursions(JavaThread* current);
+   void      inc_unmounted_vthreads();
+   void      dec_unmounted_vthreads();
+   bool      has_unmounted_vthreads() const;
  
    // JVM/TI GetObjectMonitorUsage() needs this:
    int waiters() const;
    ObjectWaiter* first_waiter()                                         { return _wait_set; }
    ObjectWaiter* next_waiter(ObjectWaiter* o)                           { return o->_next; }

@@ -406,11 +412,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);
+   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 >