diff options
| author | Matthew Dillon <dillon@FreeBSD.org> | 2000-11-18 21:01:04 +0000 |
|---|---|---|
| committer | Matthew Dillon <dillon@FreeBSD.org> | 2000-11-18 21:01:04 +0000 |
| commit | 279d7226048c39b48b788e5ea5607c0dbc042acd (patch) | |
| tree | 8d32488eeb453793eb19bb380ffcc26e97ca77fd /sys/kern/sys_pipe.c | |
| parent | d641426e5acce54fd775c3be86ddb9c2e78e8540 (diff) | |
Notes
Diffstat (limited to 'sys/kern/sys_pipe.c')
| -rw-r--r-- | sys/kern/sys_pipe.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c index 7600ffdca736..4c505e7ce55e 100644 --- a/sys/kern/sys_pipe.c +++ b/sys/kern/sys_pipe.c @@ -185,6 +185,7 @@ pipe(p, uap) error = falloc(p, &rf, &fd); if (error) goto free2; + fhold(rf); p->p_retval[0] = fd; rf->f_flag = FREAD | FWRITE; rf->f_type = DTYPE_PIPE; @@ -201,11 +202,15 @@ pipe(p, uap) rpipe->pipe_peer = wpipe; wpipe->pipe_peer = rpipe; + fdrop(rf, p); return (0); free3: - fdp->fd_ofiles[p->p_retval[0]] = 0; - ffree(rf); + if (fdp->fd_ofiles[p->p_retval[0]] == rf) { + fdp->fd_ofiles[p->p_retval[0]] = NULL; + fdrop(rf, p); + } + fdrop(rf, p); free2: (void)pipeclose(wpipe); (void)pipeclose(rpipe); |
