mirror of
https://github.com/wassname/ray.git
synced 2026-07-21 12:50:45 +08:00
fixed reference counting bug (#44)
This commit is contained in:
committed by
Philipp Moritz
parent
1548a1a523
commit
2d1453c46d
@@ -564,10 +564,13 @@ PyObject* deserialize_call(PyObject* self, PyObject* args) {
|
||||
worker->decrement_reference_count(objrefs);
|
||||
}
|
||||
int resultsize = call->result_size();
|
||||
std::vector<ObjRef> result_objrefs;
|
||||
PyObject* resultlist = PyList_New(resultsize);
|
||||
for (int i = 0; i < resultsize; ++i) {
|
||||
PyList_SetItem(resultlist, i, make_pyobjref(worker_capsule, call->result(i)));
|
||||
result_objrefs.push_back(call->result(i));
|
||||
}
|
||||
worker->decrement_reference_count(result_objrefs); // The corresponding increment is done in RemoteCall in the scheduler.
|
||||
PyObject* t = PyTuple_New(3); // We set the items of the tuple using PyTuple_SetItem, because that transfers ownership to the tuple.
|
||||
PyTuple_SetItem(t, 0, string);
|
||||
PyTuple_SetItem(t, 1, arglist);
|
||||
|
||||
@@ -16,11 +16,14 @@ Status SchedulerService::RemoteCall(ServerContext* context, const RemoteCallRequ
|
||||
size_t num_return_vals = fntable_[task->name()].num_return_vals();
|
||||
fntable_lock_.unlock();
|
||||
|
||||
std::vector<ObjRef> result_objrefs;
|
||||
for (size_t i = 0; i < num_return_vals; ++i) {
|
||||
ObjRef result = register_new_object();
|
||||
reply->add_result(result);
|
||||
task->add_result(result);
|
||||
result_objrefs.push_back(result);
|
||||
}
|
||||
increment_ref_count(result_objrefs); // The corresponding decrement will happen in deserialize_call in orchpylib.
|
||||
|
||||
task_queue_lock_.lock();
|
||||
task_queue_.emplace_back(std::move(task));
|
||||
|
||||
Reference in New Issue
Block a user