mirror of
https://github.com/openharmony/distributed_camera.git
synced 2026-07-21 04:05:22 -04:00
修改fuzz测试发现问题:sa进程动态拉起和退出,并发场景下crash问题
Signed-off-by: wangchaole <wangchaole1@huawei.com>
This commit is contained in:
@@ -49,7 +49,6 @@ ohos_shared_library("distributed_camera_sink_sdk") {
|
||||
]
|
||||
|
||||
external_deps = [
|
||||
"eventhandler:libeventhandler",
|
||||
"hiviewdfx_hilog_native:libhilog",
|
||||
"ipc:ipc_core",
|
||||
"samgr_standard:samgr_proxy",
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
#ifndef OHOS_DCAMERA_SINK_HANDLER_IPC_H
|
||||
#define OHOS_DCAMERA_SINK_HANDLER_IPC_H
|
||||
|
||||
#include "event_handler.h"
|
||||
#include "idistributed_camera_sink.h"
|
||||
#include "single_instance.h"
|
||||
|
||||
@@ -46,7 +45,6 @@ private:
|
||||
std::mutex sinkLocalDmsLock_;
|
||||
|
||||
bool isInit_;
|
||||
std::shared_ptr<AppExecFwk::EventHandler> serviceHandler_;
|
||||
std::mutex initDmsLock_;
|
||||
};
|
||||
} // namespace DistributedHardware
|
||||
|
||||
@@ -46,8 +46,6 @@ void DCameraSinkHandlerIpc::Init()
|
||||
DHLOGI("DCameraSinkHandlerIpc has already init");
|
||||
return;
|
||||
}
|
||||
auto runner = AppExecFwk::EventRunner::Create("DCameraSinkHandlerIpcHandler");
|
||||
serviceHandler_ = std::make_shared<AppExecFwk::EventHandler>(runner);
|
||||
sinkLocalRecipient_ = new SinkLocalRecipient();
|
||||
isInit_ = true;
|
||||
DHLOGI("DCameraSinkHandlerIpc Init End");
|
||||
@@ -62,8 +60,6 @@ void DCameraSinkHandlerIpc::UnInit()
|
||||
return;
|
||||
}
|
||||
DeleteSinkLocalDhms();
|
||||
DHLOGI("DCameraSinkHandlerIpc Start free serviceHandler");
|
||||
serviceHandler_ = nullptr;
|
||||
DHLOGI("DCameraSinkHandlerIpc Start free recipient");
|
||||
sinkLocalRecipient_ = nullptr;
|
||||
isInit_ = false;
|
||||
@@ -127,28 +123,18 @@ void DCameraSinkHandlerIpc::SinkLocalRecipient::OnRemoteDied(const wptr<IRemoteO
|
||||
|
||||
void DCameraSinkHandlerIpc::OnSinkLocalDmsDied(const wptr<IRemoteObject>& remote)
|
||||
{
|
||||
sptr<IRemoteObject> diedRemoted = remote.promote();
|
||||
if (diedRemoted == nullptr) {
|
||||
DHLOGE("OnSinkLocalDmsDied promote failed!");
|
||||
return;
|
||||
}
|
||||
DHLOGI("OnSinkLocalDmsDied delete diedRemoted");
|
||||
auto remoteDmsDiedFunc = [this, diedRemoted]() {
|
||||
OnSinkLocalDmsDied(diedRemoted);
|
||||
};
|
||||
if (serviceHandler_ != nullptr) {
|
||||
serviceHandler_->PostTask(remoteDmsDiedFunc);
|
||||
}
|
||||
}
|
||||
|
||||
void DCameraSinkHandlerIpc::OnSinkLocalDmsDied(const sptr<IRemoteObject>& remote)
|
||||
{
|
||||
std::lock_guard<std::mutex> autoLock(sinkLocalDmsLock_);
|
||||
if (localSink_ == nullptr) {
|
||||
DHLOGE("DCameraSinkHandlerIpc::OnSinkLocalDmsDied, localSink is null.");
|
||||
return;
|
||||
}
|
||||
if (localSink_->AsObject() != remote) {
|
||||
sptr<IRemoteObject> diedRemoted = remote.promote();
|
||||
if (diedRemoted == nullptr) {
|
||||
DHLOGE("OnSinkLocalDmsDied promote failed!");
|
||||
return;
|
||||
}
|
||||
if (localSink_->AsObject() != diedRemoted) {
|
||||
DHLOGI("OnSinkLocalDmsDied not found remote object.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -52,7 +52,6 @@ ohos_shared_library("distributed_camera_source_sdk") {
|
||||
]
|
||||
|
||||
external_deps = [
|
||||
"eventhandler:libeventhandler",
|
||||
"hiviewdfx_hilog_native:libhilog",
|
||||
"ipc:ipc_core",
|
||||
"samgr_standard:samgr_proxy",
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
#ifndef OHOS_DCAMERA_SOURCE_HANDLER_IPC_H
|
||||
#define OHOS_DCAMERA_SOURCE_HANDLER_IPC_H
|
||||
|
||||
#include "event_handler.h"
|
||||
#include "idistributed_camera_source.h"
|
||||
#include "single_instance.h"
|
||||
|
||||
@@ -34,7 +33,6 @@ public:
|
||||
private:
|
||||
DCameraSourceHandlerIpc();
|
||||
~DCameraSourceHandlerIpc();
|
||||
void OnSourceLocalDmsDied(const sptr<IRemoteObject>& remote);
|
||||
void DeleteSourceLocalDhms();
|
||||
|
||||
class SourceLocalRecipient : public IRemoteObject::DeathRecipient {
|
||||
@@ -46,7 +44,6 @@ private:
|
||||
std::mutex sourceLocalDmsLock_;
|
||||
|
||||
bool isInit_;
|
||||
std::shared_ptr<AppExecFwk::EventHandler> serviceHandler_;
|
||||
std::mutex initDmsLock_;
|
||||
};
|
||||
} // namespace DistributedHardware
|
||||
|
||||
@@ -46,8 +46,6 @@ void DCameraSourceHandlerIpc::Init()
|
||||
DHLOGI("DCameraSourceHandlerIpc has already init");
|
||||
return;
|
||||
}
|
||||
auto runner = AppExecFwk::EventRunner::Create("DCameraSourceHandlerIpcHandler");
|
||||
serviceHandler_ = std::make_shared<AppExecFwk::EventHandler>(runner);
|
||||
sourceLocalRecipient_ = new SourceLocalRecipient();
|
||||
isInit_ = true;
|
||||
DHLOGI("DCameraSourceHandlerIpc Init End");
|
||||
@@ -62,8 +60,6 @@ void DCameraSourceHandlerIpc::UnInit()
|
||||
return;
|
||||
}
|
||||
DeleteSourceLocalDhms();
|
||||
DHLOGI("DCameraSourceHandlerIpc Start free serviceHandler");
|
||||
serviceHandler_ = nullptr;
|
||||
DHLOGI("DCameraSourceHandlerIpc Start free recipient");
|
||||
sourceLocalRecipient_ = nullptr;
|
||||
isInit_ = false;
|
||||
@@ -127,35 +123,25 @@ void DCameraSourceHandlerIpc::SourceLocalRecipient::OnRemoteDied(const wptr<IRem
|
||||
|
||||
void DCameraSourceHandlerIpc::OnSourceLocalDmsDied(const wptr<IRemoteObject>& remote)
|
||||
{
|
||||
sptr<IRemoteObject> diedRemoted = remote.promote();
|
||||
if (diedRemoted == nullptr) {
|
||||
DHLOGE("OnSourceLocalDmsDied promote failed!");
|
||||
return;
|
||||
}
|
||||
DHLOGI("OnSourceLocalDmsDied delete diedRemoted");
|
||||
auto remoteDmsDiedFunc = [this, diedRemoted]() {
|
||||
OnSourceLocalDmsDied(diedRemoted);
|
||||
};
|
||||
if (serviceHandler_ != nullptr) {
|
||||
serviceHandler_->PostTask(remoteDmsDiedFunc);
|
||||
}
|
||||
}
|
||||
|
||||
void DCameraSourceHandlerIpc::OnSourceLocalDmsDied(const sptr<IRemoteObject>& remote)
|
||||
{
|
||||
std::lock_guard<std::mutex> autoLock(sourceLocalDmsLock_);
|
||||
if (localSource_ == nullptr) {
|
||||
DHLOGE("DCameraSourceHandlerIpc::OnSourceLocalDmsDied, localSource is null.");
|
||||
return;
|
||||
}
|
||||
if (localSource_->AsObject() != remote) {
|
||||
sptr<IRemoteObject> diedRemoted = remote.promote();
|
||||
if (diedRemoted == nullptr) {
|
||||
DHLOGE("OnSourceLocalDmsDied promote failed!");
|
||||
return;
|
||||
}
|
||||
if (localSource_->AsObject() != diedRemoted) {
|
||||
DHLOGI("OnSourceLocalDmsDied not found remote object.");
|
||||
return;
|
||||
}
|
||||
|
||||
DHLOGI("OnSourceLocalDmsDied Clear");
|
||||
localSource_->AsObject()->RemoveDeathRecipient(sourceLocalRecipient_);
|
||||
localSource_ = nullptr;
|
||||
}
|
||||
|
||||
} // namespace DistributedHardware
|
||||
} // namespace OHOS
|
||||
|
||||
+3
-3
@@ -16,8 +16,10 @@
|
||||
#ifndef OHOS_DCAMERA_SINK_SERVICE_IPC_H
|
||||
#define OHOS_DCAMERA_SINK_SERVICE_IPC_H
|
||||
|
||||
#include "event_handler.h"
|
||||
#include "idistributed_camera_source.h"
|
||||
|
||||
#include <map>
|
||||
|
||||
#include "single_instance.h"
|
||||
|
||||
namespace OHOS {
|
||||
@@ -35,7 +37,6 @@ public:
|
||||
private:
|
||||
DCameraSinkServiceIpc();
|
||||
~DCameraSinkServiceIpc();
|
||||
void OnSourceRemoteDmsDied(const sptr<IRemoteObject>& remote);
|
||||
void ClearSourceRemoteDhms();
|
||||
|
||||
class SourceRemoteRecipient : public IRemoteObject::DeathRecipient {
|
||||
@@ -47,7 +48,6 @@ private:
|
||||
std::mutex sourceRemoteDmsLock_;
|
||||
|
||||
bool isInit_;
|
||||
std::shared_ptr<AppExecFwk::EventHandler> serviceHandler_;
|
||||
std::mutex initDmsLock_;
|
||||
};
|
||||
} // namespace DistributedHardware
|
||||
|
||||
+5
-18
@@ -46,8 +46,6 @@ void DCameraSinkServiceIpc::Init()
|
||||
DHLOGI("DCameraSinkServiceIpc has already init");
|
||||
return;
|
||||
}
|
||||
auto runner = AppExecFwk::EventRunner::Create("DCameraSinkServiceIpcHandler");
|
||||
serviceHandler_ = std::make_shared<AppExecFwk::EventHandler>(runner);
|
||||
sourceRemoteRecipient_ = new SourceRemoteRecipient();
|
||||
isInit_ = true;
|
||||
DHLOGI("DCameraSinkServiceIpc Init End");
|
||||
@@ -62,8 +60,6 @@ void DCameraSinkServiceIpc::UnInit()
|
||||
return;
|
||||
}
|
||||
ClearSourceRemoteDhms();
|
||||
DHLOGI("DCameraSinkServiceIpc Start free serviceHandler");
|
||||
serviceHandler_ = nullptr;
|
||||
DHLOGI("DCameraSinkServiceIpc Start free recipient");
|
||||
sourceRemoteRecipient_ = nullptr;
|
||||
isInit_ = false;
|
||||
@@ -155,37 +151,28 @@ void DCameraSinkServiceIpc::SourceRemoteRecipient::OnRemoteDied(const wptr<IRemo
|
||||
|
||||
void DCameraSinkServiceIpc::OnSourceRemoteDmsDied(const wptr<IRemoteObject>& remote)
|
||||
{
|
||||
DHLOGI("OnSourceRemoteDmsDied delete diedRemoted");
|
||||
std::lock_guard<std::mutex> autoLock(sourceRemoteDmsLock_);
|
||||
sptr<IRemoteObject> diedRemoted = remote.promote();
|
||||
if (diedRemoted == nullptr) {
|
||||
DHLOGE("OnSourceRemoteDmsDied promote failed!");
|
||||
return;
|
||||
}
|
||||
DHLOGI("OnSourceRemoteDmsDied delete diedRemoted");
|
||||
auto remoteDmsDiedFunc = [this, diedRemoted]() {
|
||||
OnSourceRemoteDmsDied(diedRemoted);
|
||||
};
|
||||
if (serviceHandler_ != nullptr) {
|
||||
serviceHandler_->PostTask(remoteDmsDiedFunc);
|
||||
}
|
||||
}
|
||||
|
||||
void DCameraSinkServiceIpc::OnSourceRemoteDmsDied(const sptr<IRemoteObject>& remote)
|
||||
{
|
||||
std::lock_guard<std::mutex> autoLock(sourceRemoteDmsLock_);
|
||||
auto iter = std::find_if(remoteSources_.begin(), remoteSources_.end(), [&](
|
||||
const std::pair<std::string, sptr<IDistributedCameraSource>> &item)->bool {
|
||||
return item.second->AsObject() == remote;
|
||||
return item.second->AsObject() == diedRemoted;
|
||||
});
|
||||
if (iter == remoteSources_.end()) {
|
||||
DHLOGI("OnSourceRemoteDmsDied not found remote object");
|
||||
return;
|
||||
}
|
||||
|
||||
DHLOGI("OnSourceRemoteDmsDied remote.devId: %s", GetAnonyString(iter->first).c_str());
|
||||
if (iter->second != nullptr) {
|
||||
iter->second->AsObject()->RemoveDeathRecipient(sourceRemoteRecipient_);
|
||||
}
|
||||
remoteSources_.erase(iter);
|
||||
|
||||
}
|
||||
|
||||
} // namespace DistributedHardware
|
||||
} // namespace OHOS
|
||||
|
||||
+3
-3
@@ -16,8 +16,10 @@
|
||||
#ifndef OHOS_DCAMERA_SOURCE_SERVICE_IPC_H
|
||||
#define OHOS_DCAMERA_SOURCE_SERVICE_IPC_H
|
||||
|
||||
#include "event_handler.h"
|
||||
#include "idistributed_camera_sink.h"
|
||||
|
||||
#include <map>
|
||||
|
||||
#include "single_instance.h"
|
||||
|
||||
namespace OHOS {
|
||||
@@ -35,7 +37,6 @@ public:
|
||||
private:
|
||||
DCameraSourceServiceIpc();
|
||||
~DCameraSourceServiceIpc();
|
||||
void OnSinkRemoteDmsDied(const sptr<IRemoteObject>& remote);
|
||||
void ClearSinkRemoteDhms();
|
||||
|
||||
class SinkRemoteRecipient : public IRemoteObject::DeathRecipient {
|
||||
@@ -47,7 +48,6 @@ private:
|
||||
std::mutex sinkRemoteDmsLock_;
|
||||
|
||||
bool isInit_;
|
||||
std::shared_ptr<AppExecFwk::EventHandler> serviceHandler_;
|
||||
std::mutex initDmsLock_;
|
||||
};
|
||||
} // namespace DistributedHardware
|
||||
|
||||
+3
-17
@@ -46,8 +46,6 @@ void DCameraSourceServiceIpc::Init()
|
||||
DHLOGI("DCameraSourceServiceIpc has already init");
|
||||
return;
|
||||
}
|
||||
auto runner = AppExecFwk::EventRunner::Create("DCameraSourceServiceIpcHandler");
|
||||
serviceHandler_ = std::make_shared<AppExecFwk::EventHandler>(runner);
|
||||
sinkRemoteRecipient_ = new SinkRemoteRecipient();
|
||||
isInit_ = true;
|
||||
DHLOGI("DCameraSourceServiceIpc Init End");
|
||||
@@ -62,8 +60,6 @@ void DCameraSourceServiceIpc::UnInit()
|
||||
return;
|
||||
}
|
||||
ClearSinkRemoteDhms();
|
||||
DHLOGI("DCameraSourceServiceIpc UnInit Start free servicehandle");
|
||||
serviceHandler_ = nullptr;
|
||||
DHLOGI("DCameraSourceServiceIpc UnInit Start free recipient");
|
||||
sinkRemoteRecipient_ = nullptr;
|
||||
isInit_ = false;
|
||||
@@ -155,26 +151,16 @@ void DCameraSourceServiceIpc::SinkRemoteRecipient::OnRemoteDied(const wptr<IRemo
|
||||
|
||||
void DCameraSourceServiceIpc::OnSinkRemoteDmsDied(const wptr<IRemoteObject>& remote)
|
||||
{
|
||||
DHLOGI("OnSinkRemoteDmsDied delete diedRemoted");
|
||||
std::lock_guard<std::mutex> autoLock(sinkRemoteDmsLock_);
|
||||
sptr<IRemoteObject> diedRemoted = remote.promote();
|
||||
if (diedRemoted == nullptr) {
|
||||
DHLOGE("OnSinkRemoteDmsDied promote failed!");
|
||||
return;
|
||||
}
|
||||
DHLOGI("OnSinkRemoteDmsDied delete diedRemoted");
|
||||
auto remoteDmsDiedFunc = [this, diedRemoted]() {
|
||||
OnSinkRemoteDmsDied(diedRemoted);
|
||||
};
|
||||
if (serviceHandler_ != nullptr) {
|
||||
serviceHandler_->PostTask(remoteDmsDiedFunc);
|
||||
}
|
||||
}
|
||||
|
||||
void DCameraSourceServiceIpc::OnSinkRemoteDmsDied(const sptr<IRemoteObject>& remote)
|
||||
{
|
||||
std::lock_guard<std::mutex> autoLock(sinkRemoteDmsLock_);
|
||||
auto iter = std::find_if(remoteSinks_.begin(), remoteSinks_.end(), [&](
|
||||
const std::pair<std::string, sptr<IDistributedCameraSink>> &item)->bool {
|
||||
return item.second->AsObject() == remote;
|
||||
return item.second->AsObject() == diedRemoted;
|
||||
});
|
||||
if (iter == remoteSinks_.end()) {
|
||||
DHLOGI("OnSinkRemoteDmsDied not found remote object");
|
||||
|
||||
Reference in New Issue
Block a user