service leak detection

Signed-off-by:  detail-hua <mingxihua@huawei.com>

Signed-off-by: mingxihua <mingxihua@huawei.com>
This commit is contained in:
mingxihua
2022-01-17 11:10:30 +00:00
parent 11d003256d
commit 2ea18be050
2 changed files with 21 additions and 11 deletions
@@ -115,6 +115,9 @@ private:
bool IsConnectCallerEqual(const sptr<IRemoteObject> &connectCaller, const sptr<IRemoteObject> &connectCallerOther);
bool IsConnectReceiverEqual(const AppExecFwk::ElementName &connectReceiver,
const AppExecFwk::ElementName &connectReceiverOther);
ErrCode HandleCallbackTimeOut(const sptr<IRemoteObject> &connectCaller, const AAFwk::Want &want,
const AppExecFwk::ElementName &connectReceiver, sptr<AbilityConnection> abilityConnection,
const sptr<AbilityConnectCallback> &connectCallback);
std::map<ConnectionInfo, std::vector<sptr<AbilityConnectCallback>>> abilityConnections_;
};
} // namespace AbilityRuntime
@@ -61,17 +61,7 @@ ErrCode ConnectionManager::ConnectAbility(const sptr<IRemoteObject> &connectCall
abilityConnection->GetResultCode());
return ERR_OK;
} else {
if (abilityConnection->GetRemoteObject() == nullptr) {
while (true) {
if (abilityConnection->GetRemoteObject() != nullptr) {
connectCallback->OnAbilityConnectDone(connectReceiver, abilityConnection->GetRemoteObject(),
abilityConnection->GetResultCode());
return ERR_OK;
}
}
}
return AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, abilityConnection, connectCaller);
return HandleCallbackTimeOut(connectCaller, want, connectReceiver, abilityConnection, connectCallback);
}
} else {
abilityConnection = new AbilityConnection(connectCallback);
@@ -208,5 +198,22 @@ bool ConnectionManager::IsConnectReceiverEqual(const AppExecFwk::ElementName &co
return connectReceiver.GetBundleName() == connectReceiverOther.GetBundleName() &&
connectReceiver.GetAbilityName() == connectReceiverOther.GetAbilityName();
}
ErrCode ConnectionManager::HandleCallbackTimeOut(const sptr<IRemoteObject> &connectCaller, const AAFwk::Want &want,
const AppExecFwk::ElementName &connectReceiver, sptr<AbilityConnection> abilityConnection,
const sptr<AbilityConnectCallback> &connectCallback)
{
if (abilityConnection->GetRemoteObject() == nullptr) {
while (true) {
if (abilityConnection->GetRemoteObject() != nullptr) {
connectCallback->OnAbilityConnectDone(connectReceiver, abilityConnection->GetRemoteObject(),
abilityConnection->GetResultCode());
return ERR_OK;
}
}
} else {
return AAFwk::AbilityManagerClient::GetInstance()->ConnectAbility(want, abilityConnection, connectCaller);
}
}
} // namespace AbilityRuntime
} // namespace OHOS