![]() When a process gets restarted TypeSystem objects associated with it may get deleted, and any CompilerType objects holding on to a reference to that type system are a use-after-free in waiting. Because of the SBAPI, we don't have tight control over where CompilerTypes go and when they are used. This is particularly a problem in the Swift plugin, where the scratch TypeSystem can be restarted while the process is still running. The Swift plugin has a lock to prevent abuse, but where there's a lock there can be bugs. This patch changes CompilerType to store a std::weak_ptr<TypeSystem>. Most of the std::weak_ptr<TypeSystem>* uglyness is hidden by introducing a wrapper class CompilerType::WrappedTypeSystem that has a dyn_cast_or_null() method. The only sites that need to know about the weak pointer implementation detail are the ones that deal with creating TypeSystems. rdar://101505232 Differential Revision: https://reviews.llvm.org/D136650 |
||
---|---|---|
.. | ||
CF.cpp | ||
CF.h | ||
CFBasicHash.cpp | ||
CFBasicHash.h | ||
CMakeLists.txt | ||
Cocoa.cpp | ||
Cocoa.h | ||
CoreMedia.cpp | ||
CoreMedia.h | ||
NSArray.cpp | ||
NSDictionary.cpp | ||
NSDictionary.h | ||
NSError.cpp | ||
NSException.cpp | ||
NSIndexPath.cpp | ||
NSSet.cpp | ||
NSSet.h | ||
NSString.cpp | ||
NSString.h | ||
ObjCConstants.h | ||
ObjCLanguage.cpp | ||
ObjCLanguage.h |