add AttemptIncStrong

Signed-off-by: liubb_0516 <liubeibei8@huawei.com>
This commit is contained in:
liubb_0516
2022-03-09 19:15:28 +08:00
parent 404d4463a0
commit f71b00fcce
2 changed files with 34 additions and 0 deletions
Executable → Regular
+6
View File
@@ -70,6 +70,9 @@ public:
bool AttemptIncStrongRef(const void *objectId, int &outCount); bool AttemptIncStrongRef(const void *objectId, int &outCount);
// Only for IPC use.
bool AttemptIncStrong(const void *objectId);
bool IsLifeTimeExtended(); bool IsLifeTimeExtended();
void ExtendObjectLifetime(); void ExtendObjectLifetime();
@@ -140,6 +143,9 @@ public:
bool AttemptIncStrongRef(const void *objectId); bool AttemptIncStrongRef(const void *objectId);
// Only for IPC use.
bool AttemptIncStrong(const void *objectId);
bool IsAttemptAcquireSet(); bool IsAttemptAcquireSet();
bool IsExtendLifeTimeSet(); bool IsExtendLifeTimeSet();
Executable → Regular
+28
View File
@@ -245,6 +245,22 @@ ATTEMPT_SUCCESS:
return true; return true;
} }
bool RefCounter::AttemptIncStrong(const void *objectId)
{
IncWeakRefCount(objectId);
int curCount = GetStrongRefCount();
while (curCount > 0) {
if (atomicStrong_.compare_exchange_weak(curCount, curCount + 1, std::memory_order_relaxed)) {
break;
}
curCount = atomicStrong_.load(std::memory_order_relaxed);
}
if (curCount <= 0) {
DecWeakRefCount(objectId);
}
return curCount > 0;
}
RefBase::RefBase() : refs_(new RefCounter()) RefBase::RefBase() : refs_(new RefCounter())
{ {
refs_->IncRefCount(); refs_->IncRefCount();
@@ -434,6 +450,18 @@ bool RefBase::AttemptIncStrongRef(const void *objectId)
return false; return false;
} }
bool RefBase::AttemptIncStrong(const void *objectId)
{
if (refs_ == nullptr) {
return false;
}
if (refs_->AttemptIncStrong(objectId)) {
refs_->SetAttemptAcquire();
return true;
}
return false;
}
bool RefBase::IsAttemptAcquireSet() bool RefBase::IsAttemptAcquireSet()
{ {
if (refs_ == nullptr) { if (refs_ == nullptr) {