thomassc created this revision. Herald added projects: Kate, Frameworks. Herald added subscribers: kde-frameworks-devel, kwrite-devel. thomassc requested review of this revision.
REVISION SUMMARY In the "shortcut: try last block first" branch in TextBuffer::blockForLine(), m_lastUsedBlock is accessed multiple times. If another tread simultaneously executes the binary block search below in the same function, then m_lastUsedBlock may be modified by that thread. This may result in the first thread returning a wrong block, since it may return the modified value of m_lastUsedBlock instead of the original value that it used to determine whether the given line is in the block. This change is intended to fix a crash where an out-of-bounds line is accessed in katetextblock.cpp, which occurs about one or two times per month for me when using KDevelop. I have no idea whether this possible race condition is actually the reason for these crashes, but it seems like a plausible candidate. TEST PLAN I only tested that the code still works after the change. REPOSITORY R39 KTextEditor BRANCH fix_katetextbuffer_race_condition REVISION DETAIL https://phabricator.kde.org/D23721 AFFECTED FILES src/buffer/katetextbuffer.cpp src/buffer/katetextbuffer.h To: thomassc Cc: kwrite-devel, kde-frameworks-devel, LeGast00n, GB_2, domson, michaelh, ngraham, bruns, demsking, cullmann, sars, dhaumann