with_most_recent_buffer_do() actually does not provide any useful ownership advantage.
Buffer exclusivity is of course a non-issue because we've designed it to be safe.
The only remaining issue (arguably) is whether it matters what happens if a surface is destroyed at the same time as a snapshot's requested:
schedule snapshot
snapshot completes
surface destroyed
snapshot called back
The fact that the last two steps can now occur (safely) in any order is the point of contention. I don't think it needs to be though, because our users don't care which order they occurred in during that brief period of time. There's no logical requirement that the surface still exists after the snapshot is returned, only that the buffer existed long enough for the snapshot to get correct pixels. And that requirement is still guaranteed here.
with_most_ recent_ buffer_ do() actually does not provide any useful ownership advantage.
Buffer exclusivity is of course a non-issue because we've designed it to be safe.
The only remaining issue (arguably) is whether it matters what happens if a surface is destroyed at the same time as a snapshot's requested:
schedule snapshot
snapshot completes
surface destroyed
snapshot called back
The fact that the last two steps can now occur (safely) in any order is the point of contention. I don't think it needs to be though, because our users don't care which order they occurred in during that brief period of time. There's no logical requirement that the surface still exists after the snapshot is returned, only that the buffer existed long enough for the snapshot to get correct pixels. And that requirement is still guaranteed here.