< prev index next > src/hotspot/share/runtime/objectMonitor.hpp
Print this page
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();
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
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; }
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 >