1. 29 Apr, 2020 3 commits
    • Dmitry Kazakov's avatar
      Disable an assert in KisMementoManager::getMemento() · cc48cc53
      Dmitry Kazakov authored
      The situation it catches may appear in some projection generation
      routines, which do not care about consistent history of the device.
      Therefore, we cannot keep it all the time.
    • Dmitry Kazakov's avatar
      [NOT FOR 4.3.0] Fix a threading issue in KisTiledExtentManager · 8a1f781f
      Dmitry Kazakov authored
      Previous implemention could create ghost areas in the extent of
      the paint device if tile addition and removal happened concurrently.
      There is no evidence of this problem is real-world usecase of Krita,
      the only way how the problem was seen is in this test:
    • Dmitry Kazakov's avatar
      Add a comment about the assert in KisTiledExtentManager · c503cdfe
      Dmitry Kazakov authored
      We cannot reliably verify correctness of concurrent access to the
      tile engine. Doing run-time verification would degrage performance
      significantly. We can only catch faulty situation by side effects,
      e.g. when KisTiledExtentManager's sees that the number of tiles
      in a column became negative.
      Invariants of the tiled data manager:
      1) if one thread writes to area `rc`, no other thread should read or
         write to this area
      2) concurrent and overlapping reads from the same `rc` are allowed,
         unless there is write operation touching this `rc`.
      What happens if we break these invariants:
      1) ThreadA writes to `rc`, ThreadB reads from `rc` -> ThreadB will read
         garbage, no crash will happen, Krita can continue.
      2) ThreadA writes to `rc`, ThreadB writes to `rc` -> `rc` will contain
         garbage, no crash will happen, Krita can continue.
      3) ThreadA clears `rc` (or uses writeBytes), ThreadB reads or writes to
         `rc` -> extent manager will enter inconsistent state (or assert),
         Krita behavior is undefined.
  2. 28 Apr, 2020 1 commit
  3. 27 Apr, 2020 4 commits
  4. 26 Apr, 2020 1 commit
  5. 24 Apr, 2020 3 commits
  6. 23 Apr, 2020 8 commits
  7. 22 Apr, 2020 1 commit
  8. 20 Apr, 2020 12 commits
  9. 17 Apr, 2020 4 commits
  10. 16 Apr, 2020 3 commits