diff options
author | Jim Ingham <jingham@apple.com> | 2013-05-02 00:27:30 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2013-05-02 00:27:30 +0000 |
commit | acff8950158125374cde999738dac3b6b8348ff4 (patch) | |
tree | 8fa60ab21baab12386726b23df12677181aa22f1 /lldb/source/Target/Process.cpp | |
parent | ae4a5567e118a7819f990dad475e3297654bb9f3 (diff) | |
download | bcm5719-llvm-acff8950158125374cde999738dac3b6b8348ff4.tar.gz bcm5719-llvm-acff8950158125374cde999738dac3b6b8348ff4.zip |
Recommitting r180831 with trivial fix - remember to return errors if you compute.
llvm-svn: 180898
Diffstat (limited to 'lldb/source/Target/Process.cpp')
-rw-r--r-- | lldb/source/Target/Process.cpp | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index 8e1ab7a3f47..ce610b0c76a 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -101,6 +101,7 @@ g_properties[] = { "unwind-on-error-in-expressions", OptionValue::eTypeBoolean, true, true, NULL, NULL, "If true, errors in expression evaluation will unwind the stack back to the state before the call." }, { "python-os-plugin-path", OptionValue::eTypeFileSpec, false, true, NULL, NULL, "A path to a python OS plug-in module file that contains a OperatingSystemPlugIn class." }, { "stop-on-sharedlibrary-events" , OptionValue::eTypeBoolean, true, false, NULL, NULL, "If true, stop when a shared library is loaded or unloaded." }, + { "detach-keeps-stopped" , OptionValue::eTypeBoolean, true, false, NULL, NULL, "If true, detach will attempt to keep the process stopped." }, { NULL , OptionValue::eTypeInvalid, false, 0, NULL, NULL, NULL } }; @@ -110,7 +111,8 @@ enum { ePropertyIgnoreBreakpointsInExpressions, ePropertyUnwindOnErrorInExpressions, ePropertyPythonOSPluginPath, - ePropertyStopOnSharedLibraryEvents + ePropertyStopOnSharedLibraryEvents, + ePropertyDetachKeepsStopped }; ProcessProperties::ProcessProperties (bool is_global) : @@ -213,6 +215,20 @@ ProcessProperties::SetStopOnSharedLibraryEvents (bool stop) m_collection_sp->SetPropertyAtIndexAsBoolean(NULL, idx, stop); } +bool +ProcessProperties::GetDetachKeepsStopped () const +{ + const uint32_t idx = ePropertyDetachKeepsStopped; + return m_collection_sp->GetPropertyAtIndexAsBoolean(NULL, idx, g_properties[idx].default_uint_value != 0); +} + +void +ProcessProperties::SetDetachKeepsStopped (bool stop) +{ + const uint32_t idx = ePropertyDetachKeepsStopped; + m_collection_sp->SetPropertyAtIndexAsBoolean(NULL, idx, stop); +} + void ProcessInstanceInfo::Dump (Stream &s, Platform *platform) const { @@ -1096,7 +1112,11 @@ Process::Finalize() case eStateCrashed: case eStateSuspended: if (GetShouldDetach()) - Detach(); + { + // FIXME: This will have to be a process setting: + bool keep_stopped = false; + Detach(keep_stopped); + } else Destroy(); break; @@ -3437,7 +3457,7 @@ Process::HaltForDestroyOrDetach(lldb::EventSP &exit_event_sp) } Error -Process::Detach () +Process::Detach (bool keep_stopped) { EventSP exit_event_sp; Error error; @@ -3464,12 +3484,16 @@ Process::Detach () } } - error = DoDetach(); + error = DoDetach(keep_stopped); if (error.Success()) { DidDetach(); StopPrivateStateThread(); } + else + { + return error; + } } m_destroy_in_process = false; |