Skip to content

Commit 10942e8

Browse files
Merge pull request #9765 from felipepiovezan/felipe/reduce_lock_scope
[lldb][swift] Reduce scope of a SwiftReflectionContext
2 parents 4d9ab63 + 45b8e54 commit 10942e8

File tree

1 file changed

+24
-21
lines changed

1 file changed

+24
-21
lines changed

lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntimeDynamicTypeResolution.cpp

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1835,31 +1835,34 @@ bool SwiftLanguageRuntimeImpl::GetDynamicTypeAndAddress_Class(
18351835
return false;
18361836
}
18371837
Log *log(GetLog(LLDBLog::Types));
1838-
ThreadSafeReflectionContext reflection_ctx = GetReflectionContext();
1839-
if (!reflection_ctx)
1840-
return false;
1838+
// Scope reflection_ctx to minimize its lock scope.
1839+
{
1840+
ThreadSafeReflectionContext reflection_ctx = GetReflectionContext();
1841+
if (!reflection_ctx)
1842+
return false;
18411843

1842-
const auto *typeref = reflection_ctx->ReadTypeFromInstance(
1843-
instance_ptr, ts->GetDescriptorFinder(), true);
1844+
const auto *typeref = reflection_ctx->ReadTypeFromInstance(
1845+
instance_ptr, ts->GetDescriptorFinder(), true);
18441846

1845-
// If we couldn't find the typeref from the instance, the best we can do is
1846-
// use the static type. This is a valid use case when the binary doesn't
1847-
// contain any metadata (for example, embedded Swift).
1848-
if (!typeref)
1849-
typeref = reflection_ctx->GetTypeRefOrNull(class_type.GetMangledTypeName(),
1850-
ts->GetDescriptorFinder());
1847+
// If we couldn't find the typeref from the instance, the best we can do is
1848+
// use the static type. This is a valid use case when the binary doesn't
1849+
// contain any metadata (for example, embedded Swift).
1850+
if (!typeref)
1851+
typeref = reflection_ctx->GetTypeRefOrNull(
1852+
class_type.GetMangledTypeName(), ts->GetDescriptorFinder());
18511853

1852-
if (!typeref) {
1853-
HEALTH_LOG("could not read typeref for type: {0} (instance_ptr = {0:x})",
1854-
class_type.GetMangledTypeName(), instance_ptr);
1855-
return false;
1854+
if (!typeref) {
1855+
HEALTH_LOG("could not read typeref for type: {0} (instance_ptr = {0:x})",
1856+
class_type.GetMangledTypeName(), instance_ptr);
1857+
return false;
1858+
}
1859+
swift::Demangle::Demangler dem;
1860+
swift::Demangle::NodePointer node = typeref->getDemangling(dem);
1861+
CompilerType dynamic_type = ts->RemangleAsType(dem, node);
1862+
LLDB_LOG(log, "dynamic type of instance_ptr {0:x} is {1}", instance_ptr,
1863+
class_type.GetMangledTypeName());
1864+
class_type_or_name.SetCompilerType(dynamic_type);
18561865
}
1857-
swift::Demangle::Demangler dem;
1858-
swift::Demangle::NodePointer node = typeref->getDemangling(dem);
1859-
CompilerType dynamic_type = ts->RemangleAsType(dem, node);
1860-
LLDB_LOG(log, "dynamic type of instance_ptr {0:x} is {1}", instance_ptr,
1861-
class_type.GetMangledTypeName());
1862-
class_type_or_name.SetCompilerType(dynamic_type);
18631866

18641867
#ifndef NDEBUG
18651868
if (ModuleList::GetGlobalModuleListProperties()

0 commit comments

Comments
 (0)