diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c index 5222bca971da..4c59ae8bbc28 100644 --- a/sys/kern/uipc_syscalls.c +++ b/sys/kern/uipc_syscalls.c @@ -112,14 +112,15 @@ socket(td, uap) struct file *fp; int fd, error; - mtx_lock(&Giant); fdp = td->td_proc->p_fd; error = falloc(td, &fp, &fd); if (error) goto done2; /* An extra reference on `fp' has been held for us by falloc(). */ + mtx_lock(&Giant); error = socreate(uap->domain, &so, uap->type, uap->protocol, td->td_ucred, td); + mtx_unlock(&Giant); FILEDESC_LOCK(fdp); if (error) { if (fdp->fd_ofiles[fd] == fp) { @@ -138,7 +139,6 @@ socket(td, uap) } fdrop(fp, td); done2: - mtx_unlock(&Giant); return (error); }