Files
pytorch/torch/csrc/distributed/rpc/unpickled_python_call.cpp
Luca Wehrstedt b07d68e24c [reland] Always use intrusive_ptr for Message (2 out of 2) (#59206)
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/59206

Reland of https://github.com/pytorch/pytorch/pull/58423

This is part 2 of the previous PR. Here we address the remaining occurrences of "raw" Message, namely the ones within toMessageImpl. And since they're the last ones, we make the constructor of Message private, to prevent new usages from emerging.
ghstack-source-id: 130202848

Test Plan: CI

Reviewed By: mrshenli

Differential Revision: D28623892

fbshipit-source-id: f815cf6b93e488c118e5d2298473e6e9d9f4c132
2021-06-02 05:45:55 -07:00

40 lines
1.1 KiB
C++

#include <torch/csrc/distributed/rpc/unpickled_python_call.h>
#include <c10/util/C++17.h>
#include <torch/csrc/distributed/rpc/python_rpc_handler.h>
namespace torch {
namespace distributed {
namespace rpc {
UnpickledPythonCall::UnpickledPythonCall(
const SerializedPyObj& serializedPyObj,
bool isAsyncExecution)
: isAsyncExecution_(isAsyncExecution) {
auto& pythonRpcHandler = PythonRpcHandler::getInstance();
pybind11::gil_scoped_acquire ag;
pythonUdf_ = pythonRpcHandler.deserialize(serializedPyObj);
}
UnpickledPythonCall::~UnpickledPythonCall() {
// explicitly setting PyObject* to nullptr to prevent py::object's dtor to
// decref on the PyObject again.
// See Note [Destructing py::object] in python_ivalue.h
py::gil_scoped_acquire acquire;
pythonUdf_.dec_ref();
pythonUdf_.ptr() = nullptr;
}
c10::intrusive_ptr<Message> UnpickledPythonCall::toMessageImpl() && {
TORCH_INTERNAL_ASSERT(
false, "UnpickledPythonCall does not support toMessage().");
}
const py::object& UnpickledPythonCall::pythonUdf() const {
return pythonUdf_;
}
} // namespace rpc
} // namespace distributed
} // namespace torch