fixed reference counting bug (#44)

This commit is contained in:
Robert Nishihara
2016-04-19 10:54:16 -07:00
committed by Philipp Moritz
parent 1548a1a523
commit 2d1453c46d
2 changed files with 6 additions and 0 deletions
+3
View File
@@ -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);
+3
View File
@@ -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));