diff -ru /usr/src/sys.old/kern/subr_mbuf.c /usr/src/sys/kern/subr_mbuf.c --- /usr/src/sys.old/kern/subr_mbuf.c Wed May 28 14:04:40 2003 +++ /usr/src/sys/kern/subr_mbuf.c Wed May 28 14:14:10 2003 @@ -629,6 +629,8 @@ how = M_TRYWAIT; } } + if ((flags & M_DONTWAIT) == 0) + GIANT_REQUIRED; #endif m = NULL; diff -ru /usr/src/sys.old/kern/uipc_syscalls.c /usr/src/sys/kern/uipc_syscalls.c --- /usr/src/sys.old/kern/uipc_syscalls.c Wed May 28 14:04:40 2003 +++ /usr/src/sys/kern/uipc_syscalls.c Wed May 28 14:09:51 2003 @@ -623,13 +623,14 @@ struct sockaddr *to; int error; + mtx_lock(&Giant); + to = NULL; if (mp->msg_name != NULL) { error = getsockaddr(&to, mp->msg_name, mp->msg_namelen); if (error) - return error; + goto bad; mp->msg_name = to; - } else - to = NULL; + } if (mp->msg_control) { if (mp->msg_controllen < sizeof(struct cmsghdr) @@ -669,6 +670,7 @@ bad: if (to) FREE(to, M_SONAME); + mtx_unlock(&Giant); return (error); } @@ -691,7 +693,6 @@ int iovlen; #endif - mtx_lock(&Giant); if ((error = fgetsock(td, s, &so, NULL)) != 0) goto bad2; @@ -752,7 +753,6 @@ bad: fputsock(so); bad2: - mtx_unlock(&Giant); return (error); }