summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/parked-scope.h
diff options
context:
space:
mode:
authorMichaël Zasso <targos@protonmail.com>2021-08-29 14:20:49 +0200
committerMichaël Zasso <targos@protonmail.com>2021-08-30 21:02:51 +0200
commit50930a0fa08297d0ce7e67fa6594fe47937b99ff (patch)
tree96bd30c0c63790bc1992a2f241a3df94d563b283 /deps/v8/src/heap/parked-scope.h
parentb63e449b2eade1111b52f6559669400a4e855903 (diff)
downloadnode-new-50930a0fa08297d0ce7e67fa6594fe47937b99ff.tar.gz
deps: update V8 to 9.3.345.16
PR-URL: https://github.com/nodejs/node/pull/39469 Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'deps/v8/src/heap/parked-scope.h')
-rw-r--r--deps/v8/src/heap/parked-scope.h65
1 files changed, 57 insertions, 8 deletions
diff --git a/deps/v8/src/heap/parked-scope.h b/deps/v8/src/heap/parked-scope.h
index 1a35fbc400..41dc6bfc1f 100644
--- a/deps/v8/src/heap/parked-scope.h
+++ b/deps/v8/src/heap/parked-scope.h
@@ -45,18 +45,67 @@ class V8_NODISCARD UnparkedScope {
};
class V8_NODISCARD ParkedMutexGuard {
- base::Mutex* guard_;
+ public:
+ explicit ParkedMutexGuard(LocalIsolate* local_isolate, base::Mutex* mutex)
+ : ParkedMutexGuard(local_isolate->heap(), mutex) {}
+ explicit ParkedMutexGuard(LocalHeap* local_heap, base::Mutex* mutex)
+ : mutex_(mutex) {
+ if (!mutex_->TryLock()) {
+ ParkedScope scope(local_heap);
+ mutex_->Lock();
+ }
+ }
+
+ ParkedMutexGuard(const ParkedMutexGuard&) = delete;
+ ParkedMutexGuard& operator=(const ParkedMutexGuard&) = delete;
+
+ ~ParkedMutexGuard() { mutex_->Unlock(); }
+
+ private:
+ base::Mutex* mutex_;
+};
+template <base::MutexSharedType kIsShared,
+ base::NullBehavior Behavior = base::NullBehavior::kRequireNotNull>
+class V8_NODISCARD ParkedSharedMutexGuardIf final {
public:
- explicit ParkedMutexGuard(LocalIsolate* local_isolate, base::Mutex* guard)
- : ParkedMutexGuard(local_isolate->heap(), guard) {}
- explicit ParkedMutexGuard(LocalHeap* local_heap, base::Mutex* guard)
- : guard_(guard) {
- ParkedScope scope(local_heap);
- guard_->Lock();
+ ParkedSharedMutexGuardIf(LocalIsolate* local_isolate,
+ base::SharedMutex* mutex, bool enable_mutex)
+ : ParkedSharedMutexGuardIf(local_isolate->heap(), mutex, enable_mutex) {}
+ ParkedSharedMutexGuardIf(LocalHeap* local_heap, base::SharedMutex* mutex,
+ bool enable_mutex) {
+ DCHECK_IMPLIES(Behavior == base::NullBehavior::kRequireNotNull,
+ mutex != nullptr);
+ if (!enable_mutex) return;
+ mutex_ = mutex;
+
+ if (kIsShared) {
+ if (!mutex_->TryLockShared()) {
+ ParkedScope scope(local_heap);
+ mutex_->LockShared();
+ }
+ } else {
+ if (!mutex_->TryLockExclusive()) {
+ ParkedScope scope(local_heap);
+ mutex_->LockExclusive();
+ }
+ }
+ }
+ ParkedSharedMutexGuardIf(const ParkedSharedMutexGuardIf&) = delete;
+ ParkedSharedMutexGuardIf& operator=(const ParkedSharedMutexGuardIf&) = delete;
+
+ ~ParkedSharedMutexGuardIf() {
+ if (!mutex_) return;
+
+ if (kIsShared) {
+ mutex_->UnlockShared();
+ } else {
+ mutex_->UnlockExclusive();
+ }
}
- ~ParkedMutexGuard() { guard_->Unlock(); }
+ private:
+ base::SharedMutex* mutex_ = nullptr;
};
} // namespace internal