Reading scope models sometimes produces lots of criticals
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Unity |
Invalid
|
Undecided
|
Unassigned | ||
dee |
Invalid
|
Undecided
|
Unassigned | ||
unity (Ubuntu) |
Invalid
|
Undecided
|
Unassigned | ||
unity8 (Ubuntu) |
Invalid
|
High
|
Nick Dedekind |
Bug Description
In some cases shell gets into a situation where the results in the dee model are not properly synchronized with the qt model, which can cause the qt wrapper to try reading (now) invalid rows.
This was identified to be caused because of the way the scope results model works and how its qt wrapper deals with changesets. Basically we have a single DeeSharedModel that contains all the results for a particular search, that model gets split up by category id into multiple DeeFilterModels, which contain results for a specific category. Now the problem is that when there's a transaction (ie multiple row additions/removals) on the master shared model, the transaction is mirrored in the per-category filter models, but it introduces a problem cause we don't serialize the changes, which means that multiple filter models can have an active transaction at the same time, and when one the filter models synchronizes with the qt wrapper, a visibility change can cause a different model to be shown, and since that model is still processing the transaction, the qt wrapper won't be properly synchronized, and can ask for rows that are about to be removed.
A solution to this problem is making sure that there's always just one active transaction on the filter models.
Related branches
- Christopher Townsend (community): Approve
- PS Jenkins bot (community): Needs Fixing (continuous-integration)
-
Diff: 49 lines (+5/-2)2 files modifiedUnityCore/ScopeProxy.cpp (+3/-0)
debian/control (+2/-2)
- PS Jenkins bot (community): Approve (continuous-integration)
- Unity Team: Pending requested
-
Diff: 1591 lines (+505/-172)13 files modifiedconfigure.ac (+3/-3)
debian/libdee-1.0-4.symbols (+6/-0)
src/Makefile.am (+4/-2)
src/dee-changeset-demultiplexer.c (+94/-0)
src/dee-changeset-demultiplexer.h (+97/-0)
src/dee-filter-model.c (+226/-118)
src/dee-filter-model.h (+5/-1)
src/dee-sequence-model.c (+13/-13)
src/dee.h (+1/-0)
tests/Makefile.am (+2/-2)
tests/test-dee.c (+3/-3)
tests/test-filter-model.c (+42/-29)
vapi/dee-1.0.vapi (+9/-1)
Changed in unity8 (Ubuntu): | |
assignee: | nobody → Nick Dedekind (nick-dedekind) |
importance: | Undecided → High |
status: | New → Triaged |
no longer affects: | unity8 |
Changed in unity: | |
status: | New → Invalid |
Changed in unity (Ubuntu): | |
status: | New → Invalid |
Changed in dee: | |
status: | New → Invalid |
Affecting unity (because the splitting up into filter models is in unity-core library) + dee which should support demultiplexing.