WIP suggestion: Simplify context lock lifetimes with lambdas #1969
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
My suggestion on how to prevent double-read caused deadlocks in new/user code (and also fixes of existing ones).
The main change internally is that Context now holds
Arc<Helper<Impl>>
instead ofArc<RwLock<Impl>>
, andHelper
API consumes "transaction functors" instead of returning lock-guards. Speaking by example,ctx.input().screen_rect()
now will be implemented asctx.input(|i| i.screen_rect())
.Pros:
Cons:
Notes:
Couple more words about feature state and motivation are placed in README.md.
Also, this PR features new "hello_world_par" example, which heavily uses Context in parallel (was used for smoke testing the branch).
Currently the code is a little bit dirty, not everything can compile, but I hope it's enough to get the idea and decide is the it worth it to develop these changes.
I expect the possibility of early rejection so I hope to get some feedback from contributors about how useful will it be before continuing development.