adding refcount on nfs41_root to callback server

This commit is contained in:
unknown 2010-11-02 15:52:28 -04:00
parent 7d5e6eead2
commit 6df50ba65c

View file

@ -183,6 +183,7 @@ static unsigned int WINAPI _handle_cb_recall(void *args)
dprintf(1, "_handle_cb_recall: sending nfs41_delegreturn\n"); dprintf(1, "_handle_cb_recall: sending nfs41_delegreturn\n");
nfs41_delegreturn(cb_args->rpc_clnt->client->session, &path_fh, nfs41_delegreturn(cb_args->rpc_clnt->client->session, &path_fh,
&cb_args->args->stateid); &cb_args->args->stateid);
nfs41_root_deref(cb_args->rpc_clnt->client->root);
free(cb_args->args); free(cb_args->args);
free(cb_args); free(cb_args);
dprintf(1, "_handle_cb_recall: end\n"); dprintf(1, "_handle_cb_recall: end\n");
@ -195,6 +196,7 @@ static enum_t handle_cb_recall(
OUT struct cb_recall_res *res) OUT struct cb_recall_res *res)
{ {
nfs41_cb_recall *cb_args; nfs41_cb_recall *cb_args;
uintptr_t status;
res->status = NFS4_OK; res->status = NFS4_OK;
dprintf(CBSLVL, "OP_CB_RECALL\n"); dprintf(CBSLVL, "OP_CB_RECALL\n");
@ -211,7 +213,17 @@ static enum_t handle_cb_recall(
goto out; goto out;
} }
memcpy(cb_args->args, args, sizeof(struct cb_recall_args)); memcpy(cb_args->args, args, sizeof(struct cb_recall_args));
_beginthreadex(NULL, 0, _handle_cb_recall, cb_args, 0, NULL); status = _beginthreadex(NULL, 0, _handle_cb_recall, cb_args, 0, NULL);
if (status == -1L || !status) {
eprintf("_beginthreadex failed to start for _handle_cb_recall %d",
status);
free(cb_args->args);
free(cb_args);
res->status = NFS4ERR_RESOURCE;
goto out;
}
nfs41_root_ref(rpc_clnt->client->root);
out: out:
return res->status; return res->status;
} }