This might not work if a user triggered `ctx.read()` manually.