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 ad6f6afd8d
commit b41f114bb6
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);
// Only for IPC use.
bool AttemptIncStrong(const void *objectId);
bool IsLifeTimeExtended();
void ExtendObjectLifetime();
@@ -140,6 +143,9 @@ public:
bool AttemptIncStrongRef(const void *objectId);
// Only for IPC use.
bool AttemptIncStrong(const void *objectId);
bool IsAttemptAcquireSet();
bool IsExtendLifeTimeSet();
Executable → Regular
+28
View File
@@ -245,6 +245,22 @@ ATTEMPT_SUCCESS:
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())
{
refs_->IncRefCount();
@@ -434,6 +450,18 @@ bool RefBase::AttemptIncStrongRef(const void *objectId)
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()
{
if (refs_ == nullptr) {