summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/source/Core/Debugger.cpp8
-rw-r--r--lldb/source/Target/Process.cpp10
-rw-r--r--lldb/source/Target/Thread.cpp10
3 files changed, 19 insertions, 9 deletions
diff --git a/lldb/source/Core/Debugger.cpp b/lldb/source/Core/Debugger.cpp
index d4b9bf6c37c..304ee119198 100644
--- a/lldb/source/Core/Debugger.cpp
+++ b/lldb/source/Core/Debugger.cpp
@@ -633,11 +633,15 @@ DebuggerInstanceSettings::DebuggerInstanceSettings (UserSettingsController &owne
m_prompt (),
m_script_lang ()
{
- if (name == NULL && live_instance)
+ // CopyInstanceSettings is a pure virtual function in InstanceSettings; it therefore cannot be called
+ // until the vtables for DebuggerInstanceSettings are properly set up, i.e. AFTER all the initializers.
+ // For this reason it has to be called here, rather than in the initializer or in the parent constructor.
+
+ if (live_instance)
{
const lldb::InstanceSettingsSP &pending_settings = m_owner.FindPendingSettings (m_instance_name);
CopyInstanceSettings (pending_settings, false);
- m_owner.RemovePendingSettings (m_instance_name);
+ //m_owner.RemovePendingSettings (m_instance_name);
}
}
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp
index 565e7841881..1519e1f01f4 100644
--- a/lldb/source/Target/Process.cpp
+++ b/lldb/source/Target/Process.cpp
@@ -1974,7 +1974,7 @@ Process::ProcessSettingsController::CreateNewInstanceSettings (const char *insta
ProcessInstanceSettings::ProcessInstanceSettings (UserSettingsController &owner, bool live_instance,
const char *name) :
- InstanceSettings (owner, (name == NULL ? CreateInstanceName().AsCString() : name), live_instance),
+ InstanceSettings (owner, (name == NULL ? CreateInstanceName().AsCString() : name), live_instance),
m_run_args (),
m_env_vars (),
m_input_path (),
@@ -1983,11 +1983,15 @@ ProcessInstanceSettings::ProcessInstanceSettings (UserSettingsController &owner,
m_plugin (),
m_disable_aslr (true)
{
- if (m_instance_name != InstanceSettings::GetDefaultName() && live_instance)
+ // CopyInstanceSettings is a pure virtual function in InstanceSettings; it therefore cannot be called
+ // until the vtables for ProcessInstanceSettings are properly set up, i.e. AFTER all the initializers.
+ // For this reason it has to be called here, rather than in the initializer or in the parent constructor.
+
+ if (live_instance)
{
const lldb::InstanceSettingsSP &pending_settings = m_owner.FindPendingSettings (m_instance_name);
CopyInstanceSettings (pending_settings,false);
- m_owner.RemovePendingSettings (m_instance_name);
+ //m_owner.RemovePendingSettings (m_instance_name);
}
}
diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp
index 422257f8ad0..7fa64912a97 100644
--- a/lldb/source/Target/Thread.cpp
+++ b/lldb/source/Target/Thread.cpp
@@ -970,13 +970,15 @@ ThreadInstanceSettings::ThreadInstanceSettings (UserSettingsController &owner, b
InstanceSettings (owner, (name == NULL ? CreateInstanceName().AsCString() : name), live_instance),
m_avoid_regexp_ap ()
{
- // FIXME: This seems like generic code, why was it duplicated (with the slight difference that
- // DebuggerInstanceSettings checks name, not m_instance_name below) in Process & Debugger?
- if (m_instance_name != InstanceSettings::GetDefaultName() && live_instance)
+ // CopyInstanceSettings is a pure virtual function in InstanceSettings; it therefore cannot be called
+ // until the vtables for ThreadInstanceSettings are properly set up, i.e. AFTER all the initializers.
+ // For this reason it has to be called here, rather than in the initializer or in the parent constructor.
+
+ if (live_instance)
{
const lldb::InstanceSettingsSP &pending_settings = m_owner.FindPendingSettings (m_instance_name);
CopyInstanceSettings (pending_settings,false);
- m_owner.RemovePendingSettings (m_instance_name);
+ //m_owner.RemovePendingSettings (m_instance_name);
}
}
OpenPOWER on IntegriCloud