@@ -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
}
@@ -1148,20 +1157,27 @@ void Debugger::SetErrorFile(FileSP file_sp) {
1148
1157
}
1149
1158
1150
1159
void Debugger::SaveInputTerminalState () {
1151
- if (m_statusline)
1152
- m_statusline->Disable ();
1160
+ {
1161
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
1162
+ if (m_statusline)
1163
+ m_statusline->Disable ();
1164
+ }
1153
1165
int fd = GetInputFile ().GetDescriptor ();
1154
1166
if (fd != File::kInvalidDescriptor )
1155
1167
m_terminal_state.Save (fd, true );
1156
1168
}
1157
1169
1158
1170
void Debugger::RestoreInputTerminalState () {
1159
1171
m_terminal_state.Restore ();
1160
- if (m_statusline)
1161
- m_statusline->Enable ();
1172
+ {
1173
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
1174
+ if (m_statusline)
1175
+ m_statusline->Enable ();
1176
+ }
1162
1177
}
1163
1178
1164
1179
void Debugger::RedrawStatusline (bool update) {
1180
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
1165
1181
if (m_statusline)
1166
1182
m_statusline->Redraw (update);
1167
1183
}
@@ -2039,8 +2055,11 @@ lldb::thread_result_t Debugger::DefaultEventHandler() {
2039
2055
// are now listening to all required events so no events get missed
2040
2056
m_sync_broadcaster.BroadcastEvent (eBroadcastBitEventThreadIsListening);
2041
2057
2042
- if (!m_statusline && StatuslineSupported ())
2043
- m_statusline.emplace (*this );
2058
+ if (StatuslineSupported ()) {
2059
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
2060
+ if (!m_statusline)
2061
+ m_statusline.emplace (*this );
2062
+ }
2044
2063
2045
2064
bool done = false ;
2046
2065
while (!done) {
@@ -2101,8 +2120,11 @@ lldb::thread_result_t Debugger::DefaultEventHandler() {
2101
2120
}
2102
2121
}
2103
2122
2104
- if (m_statusline)
2105
- m_statusline.reset ();
2123
+ {
2124
+ std::lock_guard<std::mutex> guard (m_statusline_mutex);
2125
+ if (m_statusline)
2126
+ m_statusline.reset ();
2127
+ }
2106
2128
2107
2129
return {};
2108
2130
}
0 commit comments