pipe_create(): explicitly zero whole memory returned from pool_get(), instead

of some selective pieces. This fixes problem with NEW_PIPE in kernels
with DEBUG option, reported via e-mail by Chuck Silvers.

sys_pipe(): g/c fdp, provide it at the chunk of FreeBSD code where it's used
This commit is contained in:
jdolecek 2001-07-26 14:14:28 +00:00
parent ec2876e2a5
commit 875b784599
1 changed files with 6 additions and 28 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: sys_pipe.c,v 1.10 2001/07/18 06:51:38 thorpej Exp $ */
/* $NetBSD: sys_pipe.c,v 1.11 2001/07/26 14:14:28 jdolecek Exp $ */
/*
* Copyright (c) 1996 John S. Dyson
@ -230,7 +230,6 @@ sys_pipe(p, v, retval)
register_t *retval;
#endif
{
struct filedesc *fdp = p->p_fd;
struct file *rf, *wf;
struct pipe *rpipe, *wpipe;
int fd, error;
@ -267,6 +266,8 @@ sys_pipe(p, v, retval)
rf->f_ops = &pipeops;
error = falloc(p, &wf, &fd);
if (error) {
struct filedesc *fdp = p->p_fd;
if (fdp->fd_ofiles[p->p_retval[0]] == rf) {
fdp->fd_ofiles[p->p_retval[0]] = NULL;
fdrop(rf, p);
@ -332,7 +333,7 @@ sys_pipe(p, v, retval)
free3:
FILE_UNUSE(rf, p);
ffree(rf);
fdremove(fdp, retval[0]);
fdremove(p->p_fd, retval[0]);
free2:
pipeclose(wpipe);
pipeclose(rpipe);
@ -428,32 +429,9 @@ pipe_create(cpipep, allockva)
cpipe = *cpipep;
#ifdef __FreeBSD__
/* so pipespace()->pipe_free_kmem() doesn't follow junk pointer */
cpipe->pipe_buffer.object = NULL;
#endif /* FreeBSD */
/*
* protect so pipeclose() doesn't follow a junk pointer
* if pipespace() fails.
*/
cpipe->pipe_buffer.buffer = NULL;
memset(&cpipe->pipe_sel, 0, sizeof(cpipe->pipe_sel));
/* Initialize */
memset(cpipe, 0, sizeof(*cpipe));
cpipe->pipe_state = PIPE_SIGNALR;
cpipe->pipe_peer = NULL;
cpipe->pipe_busy = 0;
#ifndef PIPE_NODIRECT
/*
* pipe data structure initializations to support direct pipe I/O
*/
cpipe->pipe_map.cnt = 0;
cpipe->pipe_map.kva = NULL;
cpipe->pipe_map.pos = 0;
cpipe->pipe_map.npages = 0;
#ifdef __NetBSD__
cpipe->pipe_map.ms = NULL;
#endif
#endif /* !PIPE_NODIRECT */
if (allockva && (error = pipespace(cpipe, PIPE_SIZE)))
return (error);