diff --git a/frameworks/services/media_mtp/include/ptp_media_sync_observer.h b/frameworks/services/media_mtp/include/ptp_media_sync_observer.h index 1ceed35cb66ccc6ba9495d842027f506f4f266dd..dfd6ecc60fab4a2faa9f814972ea42f1c81d2e78 100644 --- a/frameworks/services/media_mtp/include/ptp_media_sync_observer.h +++ b/frameworks/services/media_mtp/include/ptp_media_sync_observer.h @@ -78,6 +78,7 @@ private: std::thread notifythread_; std::queue changeInfoQueue_; std::mutex mutex_; + std::mutex burstKeyMutex_; std::condition_variable cv_; std::atomic isRunning_ {false}; diff --git a/frameworks/services/media_mtp/src/ptp_media_sync_observer.cpp b/frameworks/services/media_mtp/src/ptp_media_sync_observer.cpp index 2bc34ac4717b05917083c322c9116d08cbc2d2f6..578a6a8babc9f73f17e6814553f9a0a78db15ec7 100644 --- a/frameworks/services/media_mtp/src/ptp_media_sync_observer.cpp +++ b/frameworks/services/media_mtp/src/ptp_media_sync_observer.cpp @@ -250,8 +250,11 @@ void MediaSyncObserver::DelayInfoThread() void MediaSyncObserver::AddBurstPhotoHandle(string burstKey) { - if (needAddMemberBurstKeys_.find(burstKey) == needAddMemberBurstKeys_.end()) { - return; + { + std::lock_guard lock(burstKeyMutex_); + if (needAddMemberBurstKeys_.find(burstKey) == needAddMemberBurstKeys_.end()) { + return; + } } Uri uri(PAH_QUERY_PHOTO); vector columns; @@ -274,7 +277,10 @@ void MediaSyncObserver::AddBurstPhotoHandle(string burstKey) int32_t fileId = GetInt32Val(MediaColumn::MEDIA_ID, resultSet); SendEventPackets(fileId + COMMON_PHOTOS_OFFSET, MTP_EVENT_OBJECT_ADDED_CODE); } while (resultSet->GoToNextRow() == NativeRdb::E_OK); - needAddMemberBurstKeys_.erase(burstKey); + { + std::lock_guard lock(burstKeyMutex_); + needAddMemberBurstKeys_.erase(burstKey); + } } void MediaSyncObserver::AddDelayInfo(uint32_t handle, uint32_t ownerAlbumId, const string &burstKey, uint64_t delayMs) @@ -324,7 +330,10 @@ void MediaSyncObserver::AddPhotoHandle(int32_t handle) AddDelayInfo(handle + COMMON_MOVING_OFFSET, ownerAlbumId, "", DELAY_FOR_MOVING_MS); } else if (subtype == static_cast(PhotoSubType::BURST)) { string burstKey = GetStringVal(PhotoColumn::PHOTO_BURST_KEY, resultSet); - needAddMemberBurstKeys_.insert(burstKey); + { + std::lock_guard lock(burstKeyMutex_); + needAddMemberBurstKeys_.insert(burstKey); + } AddBurstPhotoHandle(previousAddedBurstKey_); previousAddedBurstKey_ = burstKey; AddDelayInfo(handle + COMMON_PHOTOS_OFFSET, ownerAlbumId, burstKey, DELAY_FOR_BURST_MS);