sys_pipe.c (110908) | sys_pipe.c (111119) |
---|---|
1/* 2 * Copyright (c) 1996 John S. Dyson 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice immediately at the beginning of the file, without modification, 10 * this list of conditions, and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. Absolutely no warranty of function or purpose is made by the author 15 * John S. Dyson. 16 * 4. Modifications may be freely made to this file if the above conditions 17 * are met. 18 * | 1/* 2 * Copyright (c) 1996 John S. Dyson 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice immediately at the beginning of the file, without modification, 10 * this list of conditions, and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. Absolutely no warranty of function or purpose is made by the author 15 * John S. Dyson. 16 * 4. Modifications may be freely made to this file if the above conditions 17 * are met. 18 * |
19 * $FreeBSD: head/sys/kern/sys_pipe.c 110908 2003-02-15 06:04:55Z alfred $ | 19 * $FreeBSD: head/sys/kern/sys_pipe.c 111119 2003-02-19 05:47:46Z imp $ |
20 */ 21 22/* 23 * This file contains a high-performance replacement for the socket-based 24 * pipes scheme originally used in FreeBSD/4.4Lite. It does not support 25 * all features of sockets, but does do everything that pipes normally 26 * do. 27 */ --- 173 unchanged lines hidden (view full) --- 201 struct filedesc *fdp = td->td_proc->p_fd; 202 struct file *rf, *wf; 203 struct pipe *rpipe, *wpipe; 204 struct mtx *pmtx; 205 int fd, error; 206 207 KASSERT(pipe_zone != NULL, ("pipe_zone not initialized")); 208 | 20 */ 21 22/* 23 * This file contains a high-performance replacement for the socket-based 24 * pipes scheme originally used in FreeBSD/4.4Lite. It does not support 25 * all features of sockets, but does do everything that pipes normally 26 * do. 27 */ --- 173 unchanged lines hidden (view full) --- 201 struct filedesc *fdp = td->td_proc->p_fd; 202 struct file *rf, *wf; 203 struct pipe *rpipe, *wpipe; 204 struct mtx *pmtx; 205 int fd, error; 206 207 KASSERT(pipe_zone != NULL, ("pipe_zone not initialized")); 208 |
209 pmtx = malloc(sizeof(*pmtx), M_TEMP, M_ZERO); | 209 pmtx = malloc(sizeof(*pmtx), M_TEMP, M_WAITOK | M_ZERO); |
210 211 rpipe = wpipe = NULL; 212 if (pipe_create(&rpipe) || pipe_create(&wpipe)) { 213 pipeclose(rpipe); 214 pipeclose(wpipe); 215 free(pmtx, M_TEMP); 216 return (ENFILE); 217 } --- 123 unchanged lines hidden (view full) --- 341 */ 342static int 343pipe_create(cpipep) 344 struct pipe **cpipep; 345{ 346 struct pipe *cpipe; 347 int error; 348 | 210 211 rpipe = wpipe = NULL; 212 if (pipe_create(&rpipe) || pipe_create(&wpipe)) { 213 pipeclose(rpipe); 214 pipeclose(wpipe); 215 free(pmtx, M_TEMP); 216 return (ENFILE); 217 } --- 123 unchanged lines hidden (view full) --- 341 */ 342static int 343pipe_create(cpipep) 344 struct pipe **cpipep; 345{ 346 struct pipe *cpipe; 347 int error; 348 |
349 *cpipep = uma_zalloc(pipe_zone, 0); | 349 *cpipep = uma_zalloc(pipe_zone, M_WAITOK); |
350 if (*cpipep == NULL) 351 return (ENOMEM); 352 353 cpipe = *cpipep; 354 355 /* so pipespace()->pipe_free_kmem() doesn't follow junk pointer */ 356 cpipe->pipe_buffer.object = NULL; 357#ifndef PIPE_NODIRECT --- 1152 unchanged lines hidden --- | 350 if (*cpipep == NULL) 351 return (ENOMEM); 352 353 cpipe = *cpipep; 354 355 /* so pipespace()->pipe_free_kmem() doesn't follow junk pointer */ 356 cpipe->pipe_buffer.object = NULL; 357#ifndef PIPE_NODIRECT --- 1152 unchanged lines hidden --- |