summaryrefslogtreecommitdiffstats
path: root/lldb/source/Commands/CommandObjectExpression.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2013-01-26 23:54:29 +0000
committerGreg Clayton <gclayton@apple.com>2013-01-26 23:54:29 +0000
commitba7b8e2c8c48f3ae3eda4508d4076d00b4644358 (patch)
treebe097c6990d57e550fec0ceee9fe3d87628969ae /lldb/source/Commands/CommandObjectExpression.cpp
parentb95b3f128bd83854b7159300902a0e124d0205d4 (diff)
downloadbcm5719-llvm-ba7b8e2c8c48f3ae3eda4508d4076d00b4644358.tar.gz
bcm5719-llvm-ba7b8e2c8c48f3ae3eda4508d4076d00b4644358.zip
Make sure that multi-line expressions don't create a default target. We recently switched to using a built-in m_exe_ctx when running commands in the DoExecute() so that we can have common code where commands can required having a valid target/process/thread/frame by specifying flags, this caused multi-line expression to always create a new dummy target because m_exe_ctx gets cleared when DoExecute exits. A new input reader has been pushed to handle the input for the expression, which will get popped off and then it was checking the target in m_exe_ctx (which was cleared).
llvm-svn: 173596
Diffstat (limited to 'lldb/source/Commands/CommandObjectExpression.cpp')
-rw-r--r--lldb/source/Commands/CommandObjectExpression.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/lldb/source/Commands/CommandObjectExpression.cpp b/lldb/source/Commands/CommandObjectExpression.cpp
index 703e1356332..9c4c05d2410 100644
--- a/lldb/source/Commands/CommandObjectExpression.cpp
+++ b/lldb/source/Commands/CommandObjectExpression.cpp
@@ -314,7 +314,12 @@ CommandObjectExpression::EvaluateExpression
CommandReturnObject *result
)
{
- Target *target = m_exe_ctx.GetTargetPtr();
+ // Don't use m_exe_ctx as this might be called asynchronously
+ // after the command object DoExecute has finished when doing
+ // multi-line expression that use an input reader...
+ ExecutionContext exe_ctx (m_interpreter.GetExecutionContext());
+
+ Target *target = exe_ctx.GetTargetPtr();
if (!target)
target = Host::GetDummyTarget(m_interpreter.GetDebugger()).get();
@@ -337,7 +342,7 @@ CommandObjectExpression::EvaluateExpression
.SetTimeoutUsec(m_command_options.timeout);
exe_results = target->EvaluateExpression (expr,
- m_exe_ctx.GetFramePtr(),
+ exe_ctx.GetFramePtr(),
result_valobj_sp,
options);
@@ -347,7 +352,7 @@ CommandObjectExpression::EvaluateExpression
uint32_t start_frame = 0;
uint32_t num_frames = 1;
uint32_t num_frames_with_source = 0;
- Thread *thread = m_exe_ctx.GetThreadPtr();
+ Thread *thread = exe_ctx.GetThreadPtr();
if (thread)
{
thread->GetStatus (result->GetOutputStream(),
@@ -357,7 +362,7 @@ CommandObjectExpression::EvaluateExpression
}
else
{
- Process *process = m_exe_ctx.GetProcessPtr();
+ Process *process = exe_ctx.GetProcessPtr();
if (process)
{
bool only_threads_with_stop_reason = true;
OpenPOWER on IntegriCloud