Removes boxed closures to compile w/ latest nightly. #263
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.
Boxed closures were removed in rust-lang/rust/pull/20578; their use is now a compile error.
Most of these changes are straightforward but I would like to draw special attention to commit 853c36e which fixes up
src/sdl2/timer.rs
I discovered a safety violation: but I believe it was present in the previous revision with boxed closures as well. If the
Timer
is dropped before SDL fires the callback, and theremove_on_drop
flag is not set:then the C code is calling back into a stack-frame which just got freed.
Even putting the closure in a
Box<Fn() -> uint>
does not help here. The boxed closure would just be stored inside theTimer
which was just dropped.I believe the constructor should be split in two:
remove_on_drop
to true.remove_on_drop
flags themselves.remove_on_drop: false
will only work in the case that the closure lives longer than theTimer<'a>
.Perhaps there is some other way we could express this w/ lifetime bounds, though?
Let me know your thoughts... but I believe this patch preserves the semantics of the previous revision.