Currently the call temp storage stores the latest 10 blocks. Ideally it would instead give a "guard" to each eth_call that started in a certain block and once all guards were dropped it would free that block. This approach has some caveats though, for instance the current pending block should not be dropped until a new pending block is appended.