@@ -251,6 +251,7 @@ Status Debugger::SetPropertyValue(const ExecutionContext *exe_ctx,
251
251
g_debugger_properties[ePropertyShowStatusline].name ) {
252
252
// Statusline setting changed. If we have a statusline instance, update it
253
253
// now. Otherwise it will get created in the default event handler.
254
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
254
255
if (StatuslineSupported ())
255
256
m_statusline.emplace (*this );
256
257
else
@@ -391,8 +392,12 @@ bool Debugger::SetTerminalWidth(uint64_t term_width) {
391
392
392
393
if (auto handler_sp = m_io_handler_stack.Top ())
393
394
handler_sp->TerminalSizeChanged ();
394
- if (m_statusline)
395
- m_statusline->TerminalSizeChanged ();
395
+
396
+ {
397
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
398
+ if (m_statusline)
399
+ m_statusline->TerminalSizeChanged ();
400
+ }
396
401
397
402
return success;
398
403
}
@@ -409,8 +414,12 @@ bool Debugger::SetTerminalHeight(uint64_t term_height) {
409
414
410
415
if (auto handler_sp = m_io_handler_stack.Top ())
411
416
handler_sp->TerminalSizeChanged ();
412
- if (m_statusline)
413
- m_statusline->TerminalSizeChanged ();
417
+
418
+ {
419
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
420
+ if (m_statusline)
421
+ m_statusline->TerminalSizeChanged ();
422
+ }
414
423
415
424
return success;
416
425
}
@@ -1141,20 +1150,27 @@ void Debugger::SetErrorFile(FileSP file_sp) {
1141
1150
}
1142
1151
1143
1152
void Debugger::SaveInputTerminalState () {
1144
- if (m_statusline)
1145
- m_statusline->Disable ();
1153
+ {
1154
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
1155
+ if (m_statusline)
1156
+ m_statusline->Disable ();
1157
+ }
1146
1158
int fd = GetInputFile ().GetDescriptor ();
1147
1159
if (fd != File::kInvalidDescriptor )
1148
1160
m_terminal_state.Save (fd, true );
1149
1161
}
1150
1162
1151
1163
void Debugger::RestoreInputTerminalState () {
1152
1164
m_terminal_state.Restore ();
1153
- if (m_statusline)
1154
- m_statusline->Enable ();
1165
+ {
1166
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
1167
+ if (m_statusline)
1168
+ m_statusline->Enable ();
1169
+ }
1155
1170
}
1156
1171
1157
1172
void Debugger::RedrawStatusline (bool update) {
1173
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
1158
1174
if (m_statusline)
1159
1175
m_statusline->Redraw (update);
1160
1176
}
@@ -2032,8 +2048,11 @@ lldb::thread_result_t Debugger::DefaultEventHandler() {
2032
2048
// are now listening to all required events so no events get missed
2033
2049
m_sync_broadcaster.BroadcastEvent (eBroadcastBitEventThreadIsListening);
2034
2050
2035
- if (!m_statusline && StatuslineSupported ())
2036
- m_statusline.emplace (*this );
2051
+ if (StatuslineSupported ()) {
2052
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
2053
+ if (!m_statusline)
2054
+ m_statusline.emplace (*this );
2055
+ }
2037
2056
2038
2057
bool done = false ;
2039
2058
while (!done) {
@@ -2094,8 +2113,11 @@ lldb::thread_result_t Debugger::DefaultEventHandler() {
2094
2113
}
2095
2114
}
2096
2115
2097
- if (m_statusline)
2098
- m_statusline.reset ();
2116
+ {
2117
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
2118
+ if (m_statusline)
2119
+ m_statusline.reset ();
2120
+ }
2099
2121
2100
2122
return {};
2101
2123
}
0 commit comments