summaryrefslogtreecommitdiffstats
path: root/sys/netinet/tcp_timewait.c
diff options
context:
space:
mode:
authortruckman <truckman@FreeBSD.org>2002-07-11 23:18:43 +0000
committertruckman <truckman@FreeBSD.org>2002-07-11 23:18:43 +0000
commit5d8999f18a0f3915a58377ada8c5eba3770bcb42 (patch)
tree81d2779facad8b84176a57645f096be8d79ff82c /sys/netinet/tcp_timewait.c
parentfe3b828f84110cc861c7b7e84b37defa519387ea (diff)
downloadFreeBSD-src-5d8999f18a0f3915a58377ada8c5eba3770bcb42.zip
FreeBSD-src-5d8999f18a0f3915a58377ada8c5eba3770bcb42.tar.gz
Defer calling SYSCTL_OUT() until after the locks have been released.
Diffstat (limited to 'sys/netinet/tcp_timewait.c')
-rw-r--r--sys/netinet/tcp_timewait.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c
index 07deac9..9dab996 100644
--- a/sys/netinet/tcp_timewait.c
+++ b/sys/netinet/tcp_timewait.c
@@ -941,12 +941,13 @@ tcp_getcred(SYSCTL_HANDLER_ARGS)
if (error)
goto out;
cru2x(inp->inp_socket->so_cred, &xuc);
- error = SYSCTL_OUT(req, &xuc, sizeof(struct xucred));
out:
INP_UNLOCK(inp);
outunlocked:
INP_INFO_RUNLOCK(&tcbinfo);
splx(s);
+ if (error == 0)
+ error = SYSCTL_OUT(req, &xuc, sizeof(struct xucred));
return (error);
}
@@ -1002,12 +1003,13 @@ tcp6_getcred(SYSCTL_HANDLER_ARGS)
if (error)
goto out;
cru2x(inp->inp_socket->so_cred, &xuc);
- error = SYSCTL_OUT(req, &xuc, sizeof(struct xucred));
out:
INP_UNLOCK(inp);
outunlocked:
INP_INFO_RUNLOCK(&tcbinfo);
splx(s);
+ if (error == 0)
+ error = SYSCTL_OUT(req, &xuc, sizeof(struct xucred));
return (error);
}
OpenPOWER on IntegriCloud