There were a few error cases where the RPC code would return with

all signals masked (whoops). Add the missing cleanup code.

Reviewed by:	Martin Blapp <mb@imp.ch>, alfred
This commit is contained in:
Ian Dowse 2001-04-02 22:14:13 +00:00
parent 2c514a3101
commit cd51746902
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=75097
2 changed files with 5 additions and 1 deletions

View File

@ -681,8 +681,10 @@ clnt_dg_control(cl, request, info)
break;
case CLSET_SVC_ADDR: /* set to new address */
addr = (struct netbuf *)(void *)info;
if (addr->len < sizeof cu->cu_raddr)
if (addr->len < sizeof cu->cu_raddr) {
release_fd_lock(cu->cu_fd, mask);
return (FALSE);
}
(void) memcpy(&cu->cu_raddr, addr->buf, addr->len);
cu->cu_rlen = addr->len;
break;

View File

@ -231,12 +231,14 @@ clnt_vc_create(fd, raddr, prog, vers, sendsz, recvsz)
rpc_createerr.cf_stat = RPC_SYSTEMERROR;
rpc_createerr.cf_error.re_errno = errno;
mutex_unlock(&clnt_fd_lock);
thr_sigsetmask(SIG_SETMASK, &(mask), NULL);
goto err;
}
if (_connect(fd, (struct sockaddr *)raddr->buf, raddr->len) < 0){
rpc_createerr.cf_stat = RPC_SYSTEMERROR;
rpc_createerr.cf_error.re_errno = errno;
mutex_unlock(&clnt_fd_lock);
thr_sigsetmask(SIG_SETMASK, &(mask), NULL);
goto err;
}
}