aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/uipc_usrreq.c
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2015-06-14 14:08:52 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2015-06-14 14:08:52 +0000
commitea31808c3b07eb7bdea0f8f552508ddf620f043f (patch)
tree3e0c86c9640af4b5b6613549cd3eef0d3c398674 /sys/kern/uipc_usrreq.c
parent3768a5dfb578706668bd43355ff995439da7429d (diff)
downloadsrc-ea31808c3b07eb7bdea0f8f552508ddf620f043f.tar.gz
src-ea31808c3b07eb7bdea0f8f552508ddf620f043f.zip
fd: move out actual fp installation to _finstall
Use it in fd passing functions as the first step towards fd code cleanup.
Notes
Notes: svn path=/head/; revision=284380
Diffstat (limited to 'sys/kern/uipc_usrreq.c')
-rw-r--r--sys/kern/uipc_usrreq.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c
index 808020e5e61d..acf9fe9bd1e0 100644
--- a/sys/kern/uipc_usrreq.c
+++ b/sys/kern/uipc_usrreq.c
@@ -1736,7 +1736,7 @@ unp_externalize(struct mbuf *control, struct mbuf **controlp, int flags)
int i;
int *fdp;
struct filedesc *fdesc = td->td_proc->p_fd;
- struct filedescent *fde, **fdep;
+ struct filedescent **fdep;
void *data;
socklen_t clen = control->m_len, datalen;
int error, newfds;
@@ -1795,13 +1795,10 @@ unp_externalize(struct mbuf *control, struct mbuf **controlp, int flags)
goto next;
}
for (i = 0; i < newfds; i++, fdp++) {
- fde = &fdesc->fd_ofiles[*fdp];
- fde->fde_file = fdep[i]->fde_file;
- filecaps_move(&fdep[i]->fde_caps,
- &fde->fde_caps);
- if ((flags & MSG_CMSG_CLOEXEC) != 0)
- fde->fde_flags |= UF_EXCLOSE;
- unp_externalize_fp(fde->fde_file);
+ _finstall(fdesc, fdep[i]->fde_file, *fdp,
+ (flags & MSG_CMSG_CLOEXEC) != 0 ? UF_EXCLOSE : 0,
+ &fdep[i]->fde_caps);
+ unp_externalize_fp(fdep[i]->fde_file);
}
FILEDESC_XUNLOCK(fdesc);
free(fdep[0], M_FILECAPS);