@@ -601,7 +601,9 @@ class ABSL_SCOPED_LOCKABLE MutexLock {
601601
602602 // Calls `mu.lock()` and returns when that call returns. That is, `mu` is
603603 // guaranteed to be locked when this object is constructed.
604- explicit MutexLock (Mutex& mu) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu) : mu_(mu) {
604+ explicit MutexLock (Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY (this ))
605+ ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
606+ : mu_(mu) {
605607 this ->mu_ .lock ();
606608 }
607609
@@ -611,8 +613,8 @@ class ABSL_SCOPED_LOCKABLE MutexLock {
611613 // Like above, but calls `mu->LockWhen(cond)` instead. That is, in addition to
612614 // the above, the condition given by `cond` is also guaranteed to hold when
613615 // this object is constructed.
614- explicit MutexLock (Mutex& mu, const Condition& cond)
615- ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
616+ explicit MutexLock (Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY ( this ),
617+ const Condition& cond) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
616618 : mu_(mu) {
617619 this ->mu_ .LockWhen (cond);
618620 }
@@ -638,15 +640,17 @@ class ABSL_SCOPED_LOCKABLE MutexLock {
638640// releases a shared lock on a `Mutex` via RAII.
639641class ABSL_SCOPED_LOCKABLE ReaderMutexLock {
640642 public:
641- explicit ReaderMutexLock (Mutex& mu) ABSL_SHARED_LOCK_FUNCTION(mu) : mu_(mu) {
643+ explicit ReaderMutexLock (Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY (this ))
644+ ABSL_SHARED_LOCK_FUNCTION(mu)
645+ : mu_(mu) {
642646 mu.ReaderLock ();
643647 }
644648
645649 explicit ReaderMutexLock (Mutex* absl_nonnull mu) ABSL_SHARED_LOCK_FUNCTION(mu)
646650 : ReaderMutexLock(*mu) {}
647651
648- explicit ReaderMutexLock (Mutex& mu, const Condition& cond)
649- ABSL_SHARED_LOCK_FUNCTION(mu)
652+ explicit ReaderMutexLock (Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY ( this ),
653+ const Condition& cond) ABSL_SHARED_LOCK_FUNCTION(mu)
650654 : mu_(mu) {
651655 mu.ReaderLockWhen (cond);
652656 }
@@ -672,7 +676,8 @@ class ABSL_SCOPED_LOCKABLE ReaderMutexLock {
672676// releases a write (exclusive) lock on a `Mutex` via RAII.
673677class ABSL_SCOPED_LOCKABLE WriterMutexLock {
674678 public:
675- explicit WriterMutexLock (Mutex& mu) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
679+ explicit WriterMutexLock (Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY (this ))
680+ ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
676681 : mu_(mu) {
677682 mu.WriterLock ();
678683 }
@@ -681,7 +686,8 @@ class ABSL_SCOPED_LOCKABLE WriterMutexLock {
681686 ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
682687 : WriterMutexLock(*mu) {}
683688
684- explicit WriterMutexLock (Mutex& mu, const Condition& cond)
689+ explicit WriterMutexLock (Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY (this ),
690+ const Condition& cond)
685691 ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
686692 : mu_(mu) {
687693 mu.WriterLockWhen (cond);
@@ -1084,7 +1090,8 @@ class ABSL_SCOPED_LOCKABLE MutexLockMaybe {
10841090// mutex before destruction. `Release()` may be called at most once.
10851091class ABSL_SCOPED_LOCKABLE ReleasableMutexLock {
10861092 public:
1087- explicit ReleasableMutexLock (Mutex& mu) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
1093+ explicit ReleasableMutexLock (Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY (
1094+ this )) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
10881095 : mu_(&mu) {
10891096 this ->mu_ ->Lock ();
10901097 }
@@ -1093,8 +1100,9 @@ class ABSL_SCOPED_LOCKABLE ReleasableMutexLock {
10931100 ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
10941101 : ReleasableMutexLock(*mu) {}
10951102
1096- explicit ReleasableMutexLock (Mutex& mu, const Condition& cond)
1097- ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
1103+ explicit ReleasableMutexLock (
1104+ Mutex& mu ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY (this ),
1105+ const Condition& cond) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu)
10981106 : mu_(&mu) {
10991107 this ->mu_ ->LockWhen (cond);
11001108 }
0 commit comments