The "Graph follows" checkbox controls if the Graph widget follows or not the change of the Active marker made from the View widget (the text data table). In the same time, when the user clicks on the checkbox switching it from Unchecked to Checked, a signal is send to the Graph widget to make sure that it will visualize the current position of the Active marker. When sending this signal, we currently use the iterator of the search results list, which is wrong because of two reasons. First, the search results list can be empty, which will trigger a segmentation fault, as reported by Valentin Schneider. But even more important is that nothing guarantees that when the checkbox is clacked, the marker and the iterator both point to the same trace entry. Note that the iteration over the search results is only one of the possible ways to change the marker. Reported-By: Valentin Schneider <valentin.schneider@xxxxxxx> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=204139 Tested-by: Valentin Schneider <valentin.schneider@xxxxxxx> Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@xxxxxxxxx> --- kernel-shark/src/KsTraceViewer.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/kernel-shark/src/KsTraceViewer.cpp b/kernel-shark/src/KsTraceViewer.cpp index 05977c3..89e5dba 100644 --- a/kernel-shark/src/KsTraceViewer.cpp +++ b/kernel-shark/src/KsTraceViewer.cpp @@ -285,10 +285,11 @@ void KsTraceViewer::_searchEditText(const QString &text) void KsTraceViewer::_graphFollowsChanged(int state) { - _graphFollows = (bool) state; + int row = selectedRow(); - if (_graphFollows && _searchDone()) - emit select(*_it); // Send a signal to the Graph widget. + _graphFollows = (bool) state; + if (_graphFollows && row != KS_NO_ROW_SELECTED) + emit select(row); // Send a signal to the Graph widget. } void KsTraceViewer::_search() -- 2.20.1