Keep the argument tuple owned by varfunc for its full per-call lifetime. ConvertFunc destroys varfunc before ScopedFuncCall, so the tuple is released exactly once while the GIL is still held, including failed callbacks.