Mercurial > hg > CbC > CbC_llvm
diff llvm/tools/dsymutil/BinaryHolder.cpp @ 236:c4bab56944e8 llvm-original
LLVM 16
author | kono |
---|---|
date | Wed, 09 Nov 2022 17:45:10 +0900 |
parents | 79ff65ed7e25 |
children | 1f2b6ac9f198 |
line wrap: on
line diff
--- a/llvm/tools/dsymutil/BinaryHolder.cpp Wed Jul 21 10:27:27 2021 +0900 +++ b/llvm/tools/dsymutil/BinaryHolder.cpp Wed Nov 09 17:45:10 2022 +0900 @@ -168,20 +168,17 @@ StringRef ArchiveFilename; StringRef ObjectFilename; std::tie(ArchiveFilename, ObjectFilename) = getArchiveAndObjectName(Filename); - - // Try the cache first. KeyTy Key = {ObjectFilename, Timestamp}; - { - std::lock_guard<std::mutex> Lock(MemberCacheMutex); - if (MemberCache.count(Key)) - return MemberCache[Key]; - } + // Try the cache first. + std::lock_guard<std::mutex> Lock(MemberCacheMutex); + if (MemberCache.count(Key)) + return *MemberCache[Key].get(); // Create a new ObjectEntry, but don't add it to the cache yet. Loading of // the archive members might fail and we don't want to lock the whole archive // during this operation. - ObjectEntry OE; + auto OE = std::make_unique<ObjectEntry>(); for (const auto &Archive : Archives) { Error Err = Error::success(); @@ -216,7 +213,7 @@ if (!ErrOrObjectFile) return ErrOrObjectFile.takeError(); - OE.Objects.push_back(std::move(*ErrOrObjectFile)); + OE->Objects.push_back(std::move(*ErrOrObjectFile)); } } } @@ -224,12 +221,11 @@ return std::move(Err); } - if (OE.Objects.empty()) + if (OE->Objects.empty()) return errorCodeToError(errc::no_such_file_or_directory); - std::lock_guard<std::mutex> Lock(MemberCacheMutex); - MemberCache.try_emplace(Key, std::move(OE)); - return MemberCache[Key]; + MemberCache[Key] = std::move(OE); + return *MemberCache[Key]; } Expected<const BinaryHolder::ObjectEntry &> @@ -243,18 +239,18 @@ StringRef ArchiveFilename = getArchiveAndObjectName(Filename).first; std::lock_guard<std::mutex> Lock(ArchiveCacheMutex); if (ArchiveCache.count(ArchiveFilename)) { - return ArchiveCache[ArchiveFilename].getObjectEntry(Filename, Timestamp, - Verbose); + return ArchiveCache[ArchiveFilename]->getObjectEntry(Filename, Timestamp, + Verbose); } else { - ArchiveEntry &AE = ArchiveCache[ArchiveFilename]; - auto Err = AE.load(VFS, Filename, Timestamp, Verbose); + auto AE = std::make_unique<ArchiveEntry>(); + auto Err = AE->load(VFS, Filename, Timestamp, Verbose); if (Err) { - ArchiveCache.erase(ArchiveFilename); // Don't return the error here: maybe the file wasn't an archive. llvm::consumeError(std::move(Err)); } else { - return ArchiveCache[ArchiveFilename].getObjectEntry(Filename, Timestamp, - Verbose); + ArchiveCache[ArchiveFilename] = std::move(AE); + return ArchiveCache[ArchiveFilename]->getObjectEntry( + Filename, Timestamp, Verbose); } } } @@ -263,15 +259,14 @@ // it from the file system and cache it now. std::lock_guard<std::mutex> Lock(ObjectCacheMutex); if (!ObjectCache.count(Filename)) { - ObjectEntry &OE = ObjectCache[Filename]; - auto Err = OE.load(VFS, Filename, Timestamp, Verbose); - if (Err) { - ObjectCache.erase(Filename); + auto OE = std::make_unique<ObjectEntry>(); + auto Err = OE->load(VFS, Filename, Timestamp, Verbose); + if (Err) return std::move(Err); - } + ObjectCache[Filename] = std::move(OE); } - return ObjectCache[Filename]; + return *ObjectCache[Filename]; } void BinaryHolder::clear() {