5c17111ed9
This PR fixes RPC tensor cleanup for tensors returned from remote calls. When a remote function returns a `Tensor`, the RPC protocol sends both: - the remote backing data pointer - the remote tensor object handle used for deletion Previously, `TensorFromRemoteOpaqueHandle` stored only the data pointer and called `FreeHandle(space_.data)` during local tensor destruction. That is incorrect: `FreeHandle` is meant for remote object handles, not raw data-space pointers. This could lead to invalid cleanup behavior and crashes during teardown in RPC workflows, including the cross-compilation + RPC tutorial scenario reported in #18923. This change: - stores the remote tensor object handle in `RemoteSpace` - calls `FreeHandle(remote_tensor_handle)` during tensor destruction - keeps cleanup fault-tolerant if the remote connection is already closed