Skip to content

Fix race conditions when updating UI from events (again)

akwizgran requested to merge 705-adapter-revisions into master

This is my second attempt at fixing race conditions caused by updating the UI from events while background tasks are loading data from the DB. Unlike my first attempt, this one is pretty simple and doesn't require too much reasoning about possible races.

The first commit fixes a few list loading bugs I found while working on this problem, and moves the lifecycle callbacks from resume/pause to start/stop, closing #609 (closed). The second commit contains the fix for #705 (closed), which works as follows:

  • Each BriarAdapter has a revision counter
  • Before making a change to the adapter that could be overwritten by a background task, increment the revision
  • Before starting a background task that could overwrite other changes, get the current revision
  • Before applying changes from a background task that could overwrite other changes, check whether the revision has changed
  • If the revision has changed, restart the background task
  • Otherwise apply the changes

Closes #609 (closed). #705 (closed) remains open because the PagerAdapters for blogs need to be updated.

Merge request reports