simplify mark_pending, only call under withIO