diff options
Diffstat (limited to 'Userland/Applications')
-rw-r--r-- | Userland/Applications/SystemMonitor/ProcessModel.cpp | 8 | ||||
-rw-r--r-- | Userland/Applications/SystemMonitor/ProcessModel.h | 4 |
2 files changed, 8 insertions, 4 deletions
diff --git a/Userland/Applications/SystemMonitor/ProcessModel.cpp b/Userland/Applications/SystemMonitor/ProcessModel.cpp index 98f31612de..03322e6d24 100644 --- a/Userland/Applications/SystemMonitor/ProcessModel.cpp +++ b/Userland/Applications/SystemMonitor/ProcessModel.cpp @@ -344,7 +344,9 @@ GUI::ModelIndex ProcessModel::index(int row, int column, GUI::ModelIndex const& if (row >= static_cast<int>(m_processes.size())) return {}; auto corresponding_thread = m_processes[row].main_thread(); - return create_index(row, column, corresponding_thread.ptr()); + if (!corresponding_thread.has_value()) + return {}; + return create_index(row, column, corresponding_thread.release_value().ptr()); } // Thread under process. auto const& parent_thread = *static_cast<Thread const*>(parent.internal_data()); @@ -375,8 +377,10 @@ GUI::ModelIndex ProcessModel::parent_index(GUI::ModelIndex const& index) const return {}; // FIXME: We can't use first_matching here (not even a const version) because Optional cannot contain references. auto const& parent = thread.current_state.process; + if (!parent.main_thread().has_value()) + return {}; - return create_index(m_processes.find_first_index(parent).release_value(), index.column(), parent.main_thread().ptr()); + return create_index(m_processes.find_first_index(parent).release_value(), index.column(), parent.main_thread().value().ptr()); } Vector<GUI::ModelIndex> ProcessModel::matches(StringView searching, unsigned flags, GUI::ModelIndex const&) diff --git a/Userland/Applications/SystemMonitor/ProcessModel.h b/Userland/Applications/SystemMonitor/ProcessModel.h index 93f7618f46..d8daecbeef 100644 --- a/Userland/Applications/SystemMonitor/ProcessModel.h +++ b/Userland/Applications/SystemMonitor/ProcessModel.h @@ -210,9 +210,9 @@ private: return this->pid == other.pid; } - NonnullRefPtr<Thread> main_thread() const + Optional<NonnullRefPtr<Thread>> main_thread() const { - return *threads.first_matching([this](auto const thread) { return thread->current_state.tid == pid; }).value(); + return threads.first_matching([this](auto const thread) { return thread->current_state.tid == pid; }); } // Return anything but the main thread; therefore, valid indices are anything up to threads.size()-1 exclusive. |