turning callback off for krb5p

sspi requires strict ordering of messages. we can't have more than 1 outstanding rpc thus, hold the lock over send and receive and turn off callbacks.
This commit is contained in:
Olga Kornievskaia 2011-02-03 13:13:10 -05:00
parent 67ae1eddaf
commit 47b0ccda9c
5 changed files with 26 additions and 10 deletions

View file

@ -549,19 +549,26 @@ call_again:
return(ct->ct_error.re_status);
}
release_fd_lock(ct->ct_fd, mask);
#ifdef NO_CB_4_KRB5P
if (cl->cb_thread != INVALID_HANDLE_VALUE)
release_fd_lock(ct->ct_fd, mask);
#endif
/*
* Keep receiving until we get a valid transaction id
*/
while (TRUE) {
mutex_lock(&clnt_fd_lock);
while ((vc_fd_locks[WINSOCK_HANDLE_HASH(ct->ct_fd)] &&
vc_fd_locks[WINSOCK_HANDLE_HASH(ct->ct_fd)] != GetCurrentThreadId()) ||
(ct->reply_msg.rm_xid && ct->reply_msg.rm_xid != x_id))
cond_wait(&vc_cv[WINSOCK_HANDLE_HASH(ct->ct_fd)], &clnt_fd_lock);
vc_fd_locks[WINSOCK_HANDLE_HASH(ct->ct_fd)] = GetCurrentThreadId();
mutex_unlock(&clnt_fd_lock);
#ifdef NO_CB_4_KRB5P
if (cl->cb_thread != INVALID_HANDLE_VALUE) {
mutex_lock(&clnt_fd_lock);
while ((vc_fd_locks[WINSOCK_HANDLE_HASH(ct->ct_fd)] &&
vc_fd_locks[WINSOCK_HANDLE_HASH(ct->ct_fd)] != GetCurrentThreadId()) ||
(ct->reply_msg.rm_xid && ct->reply_msg.rm_xid != x_id))
cond_wait(&vc_cv[WINSOCK_HANDLE_HASH(ct->ct_fd)], &clnt_fd_lock);
vc_fd_locks[WINSOCK_HANDLE_HASH(ct->ct_fd)] = GetCurrentThreadId();
mutex_unlock(&clnt_fd_lock);
}
#endif
xdrs->x_op = XDR_DECODE;
ct->reply_msg.acpted_rply.ar_verf = _null_auth;