task_ptr call( const dsn_address_t& server, dsn_message_t request, servicelet* owner, rpc_reply_handler callback, int reply_hash ) { task_ptr tsk = new safe_task<rpc_reply_handler >(callback); if (callback != nullptr) tsk->add_ref(); // released in exec_rpc_response auto t = dsn_rpc_create_response_task( request, callback != nullptr ? safe_task<rpc_reply_handler >::exec_rpc_response : nullptr, (void*)tsk, reply_hash ); tsk->set_task_info(t); dsn_rpc_call(server, t, owner ? owner->tracker() : nullptr); return tsk; }
DSN_PY_API void dsn_rpc_call_helper(uint64_t addr, dsn_task_t rpc_call) { dsn_rpc_call(*(dsn_address_t*)&addr, rpc_call); }