已合并
fix createvirtualscreen lock #18954
wangdi创建于 4月30日
fix createvirtualscreen lock #18954
已合并
共 1 个文件变更+8-6
| @@ -81,7 +81,7 @@ private: | |||
| 81 | std::set<sptr<IVirtualScreenGroupListener>> virtualScreenGroupListeners_; | 81 | std::set<sptr<IVirtualScreenGroupListener>> virtualScreenGroupListeners_; |
| 82 | std::set<sptr<IRecordDisplayListener>> recordDisplayListeners_; | 82 | std::set<sptr<IRecordDisplayListener>> recordDisplayListeners_; |
| 83 | sptr<IDisplayManagerAgent> virtualScreenAgent_ = nullptr; | 83 | sptr<IDisplayManagerAgent> virtualScreenAgent_ = nullptr; |
| 84 | - std::mutex virtualScreenAgentMutex_; | 84 | + std::recursive_mutex virtualScreenAgentMutex_; |
| 85 | }; | 85 | }; |
| 86 | 86 | ||
| 87 | class ScreenManager::Impl::ScreenManagerListener : public DisplayManagerAgentDefault { | 87 | class ScreenManager::Impl::ScreenManagerListener : public DisplayManagerAgentDefault { |
| @@ -724,10 +724,12 @@ ScreenId ScreenManager::Impl::CreateVirtualScreen(VirtualScreenOption option) | |||
| 724 | return SCREEN_ID_INVALID; | 724 | return SCREEN_ID_INVALID; |
| 725 | } | 725 | } |
| 726 | } | 726 | } |
| 727 | - // After the process creating the virtual screen is killed, DMS needs to delete the virtual screen | 727 | + { |
| 728 | - std::lock_guard<std::mutex> agentLock(virtualScreenAgentMutex_); | 728 | + // After the process creating the virtual screen is killed, DMS needs to delete the virtual screen |
| 729 | - if (virtualScreenAgent_ == nullptr) { | 729 | + std::lock_guard<std::recursive_mutex> agentLock(virtualScreenAgentMutex_); |
| 730 | - virtualScreenAgent_ = new DisplayManagerAgentDefault(); | 730 | + if (virtualScreenAgent_ == nullptr) { |
| 731 | + virtualScreenAgent_ = new DisplayManagerAgentDefault(); | ||
| 732 | + } | ||
| 731 | } | 733 | } |
| 732 | if (option.caller_ == VirtualScreenCaller::UNKNOWN) { | 734 | if (option.caller_ == VirtualScreenCaller::UNKNOWN) { |
| 733 | option.caller_ = VirtualScreenCaller::NATIVE_SCREEN_MANAGER; | 735 | option.caller_ = VirtualScreenCaller::NATIVE_SCREEN_MANAGER; |
| @@ -911,7 +913,7 @@ void ScreenManager::Impl::OnRemoteDied() | |||
| 911 | { | 913 | { |
| 912 | TLOGD(WmsLogTag::DMS, "dms is died"); | 914 | TLOGD(WmsLogTag::DMS, "dms is died"); |
| 913 | { | 915 | { |
| 914 | - std::lock_guard<std::mutex> agentLock(virtualScreenAgentMutex_); | 916 | + std::lock_guard<std::recursive_mutex> agentLock(virtualScreenAgentMutex_); |
| 915 | virtualScreenAgent_ = nullptr; | 917 | virtualScreenAgent_ = nullptr; |
| 916 | } | 918 | } |
| 917 | 919 | ||
这里没必要换递归锁