Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(42)

Unified Diff: third_party/WebKit/Source/platform/heap/PersistentNode.h

Issue 2951903003: Hold global GC heap lock while making audio thread access. (Closed)
Patch Set: consistent lock scope wrt heap object in question Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/heap/PersistentNode.h
diff --git a/third_party/WebKit/Source/platform/heap/PersistentNode.h b/third_party/WebKit/Source/platform/heap/PersistentNode.h
index 9ed41b0db03c42f9093034a87bf8e58ca1d55606..60d179c602368d33fe3575897f2b0debf9f74f52 100644
--- a/third_party/WebKit/Source/platform/heap/PersistentNode.h
+++ b/third_party/WebKit/Source/platform/heap/PersistentNode.h
@@ -202,14 +202,27 @@ class CrossThreadPersistentRegion final {
STACK_ALLOCATED();
public:
- LockScope(CrossThreadPersistentRegion& persistent_region)
- : persistent_region_(persistent_region) {
- persistent_region_.lock();
+ LockScope(CrossThreadPersistentRegion& persistent_region,
+ bool try_lock = false)
+ : persistent_region_(persistent_region), locked_(true) {
+ if (try_lock)
+ locked_ = persistent_region_.TryLock();
+ else
+ persistent_region_.lock();
}
- ~LockScope() { persistent_region_.unlock(); }
+ ~LockScope() {
+ if (locked_)
+ persistent_region_.unlock();
+ }
+
+ // If the lock scope is set up with |try_lock| set to |true|, caller/user
+ // is responsible for checking whether the GC lock was taken via
+ // |HasLock()|.
+ bool HasLock() const { return locked_; }
private:
CrossThreadPersistentRegion& persistent_region_;
+ bool locked_;
};
void TracePersistentNodes(Visitor* visitor) {
@@ -237,6 +250,8 @@ class CrossThreadPersistentRegion final {
void unlock() { mutex_.unlock(); }
+ bool TryLock() { return mutex_.TryLock(); }
+
// We don't make CrossThreadPersistentRegion inherit from PersistentRegion
// because we don't want to virtualize performance-sensitive methods
// such as PersistentRegion::allocate/freePersistentNode.

Powered by Google App Engine
This is Rietveld 408576698