Skip to content
Permalink
Browse files

8231707: Improve Mutex inlining

Reviewed-by: rehn, dholmes, coleenp
  • Loading branch information
cl4es committed Oct 3, 2019
1 parent 022c872 commit 4084a43111f2e668acdf5e66a6c1d156bb58918e
Showing with 20 additions and 12 deletions.
  1. +17 −12 src/hotspot/share/runtime/mutex.cpp
  2. +3 −0 src/hotspot/share/runtime/mutex.hpp
@@ -70,22 +70,16 @@ void Mutex::check_no_safepoint_state(Thread* thread) {
}
#endif // ASSERT

void Mutex::lock(Thread* self) {
check_safepoint_state(self);

assert(_owner != self, "invariant");

Mutex* in_flight_mutex = NULL;
void Mutex::lock_contended(Thread* self) {
Mutex *in_flight_mutex = NULL;
DEBUG_ONLY(int retry_cnt = 0;)
bool is_active_Java_thread = self->is_active_Java_thread();
while (!_lock.try_lock()) {
// The lock is contended

#ifdef ASSERT
do {
#ifdef ASSERT
if (retry_cnt++ > 3) {
log_trace(vmmutex)("JavaThread " INTPTR_FORMAT " on %d attempt trying to acquire vmmutex %s", p2i(self), retry_cnt, _name);
}
#endif // ASSERT
#endif // ASSERT

// Is it a JavaThread participating in the safepoint protocol.
if (is_active_Java_thread) {
@@ -102,14 +96,25 @@ void Mutex::lock(Thread* self) {
_lock.lock();
break;
}
} while (!_lock.try_lock());
}

void Mutex::lock(Thread* self) {
check_safepoint_state(self);

assert(_owner != self, "invariant");

if (!_lock.try_lock()) {
// The lock is contended, use contended slow-path function to lock
lock_contended(self);
}

assert_owner(NULL);
set_owner(self);
}

void Mutex::lock() {
this->lock(Thread::current());
lock(Thread::current());
}

// Lock without safepoint check - a degenerate variant of lock() for use by
@@ -152,6 +152,9 @@ class Mutex : public CHeapObj<mtSynchronizer> {
bool is_locked() const { return _owner != NULL; }

bool try_lock(); // Like lock(), but unblocking. It returns false instead
private:
void lock_contended(Thread *thread); // contended slow-path
public:

void release_for_safepoint();

0 comments on commit 4084a43

Please sign in to comment.
You can’t perform that action at this time.