Avatar
Avatar
Yuta Saito
だからよく考えると今回のキャプチャチェインの問題は↑の swift_releaseは関係なかったです。キャプチャ時のretainに対応するreleaseが _ = await old?.value の直後に入るのでキャプチャする側のクロージャが解放される前にTaskを手放せるからリークしない、ということでした。 (edited)
omochimetaru 9/23/2022 8:15 AM
あーここに入ってるんだ。 それだと元コードの安全性は微妙だな。
8:16 AM
@nanasi oldvar にして、以下のように明示的に解放すると確実に安全で良いと思います。 現状リークしないのはコンパイラのコード生成のブレに依存してるようです。 _ = await old?.value old = nil