dreid 99/12/15 04:35:16
Modified: src/lib/apr/threadproc/beos proc.c Log: Update the proc routines for BeOS. CGI is still hosed though :-( Revision Changes Path 1.13 +50 -16 apache-2.0/src/lib/apr/threadproc/beos/proc.c Index: proc.c =================================================================== RCS file: /home/cvs/apache-2.0/src/lib/apr/threadproc/beos/proc.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- proc.c 1999/11/05 21:26:29 1.12 +++ proc.c 1999/12/15 12:35:15 1.13 @@ -93,26 +93,53 @@ ap_status_t ap_setprocattr_io(struct procattr_t *attr, ap_int32_t in, ap_int32_t out, ap_int32_t err) { - ap_status_t stat; - if (in) { - if ((stat = ap_create_pipe(&attr->child_in, &attr->parent_in, - attr->cntxt)) != APR_SUCCESS) { - return stat; + ap_status_t status; + if (in != 0) { + if ((status = ap_create_pipe(&attr->child_in, &attr->parent_in, + attr->cntxt)) != APR_SUCCESS) { + return status; } + switch (in) { + case APR_FULL_BLOCK: + ap_block_pipe(attr->child_in); + ap_block_pipe(attr->parent_in); + case APR_PARENT_BLOCK: + ap_block_pipe(attr->parent_in); + case APR_CHILD_BLOCK: + ap_block_pipe(attr->child_in); + } } if (out) { - if ((stat = ap_create_pipe(&attr->parent_out, &attr->child_out, - attr->cntxt)) != APR_SUCCESS) { - return stat; + if ((status = ap_create_pipe(&attr->parent_out, &attr->child_out, + attr->cntxt)) != APR_SUCCESS) { + return status; + } + switch (out) { + case APR_FULL_BLOCK: + ap_block_pipe(attr->child_out); + ap_block_pipe(attr->parent_out); + case APR_PARENT_BLOCK: + ap_block_pipe(attr->parent_out); + case APR_CHILD_BLOCK: + ap_block_pipe(attr->child_out); } } if (err) { - if ((stat = ap_create_pipe(&attr->parent_err, &attr->child_err, - attr->cntxt)) != APR_SUCCESS) { - return stat; + if ((status = ap_create_pipe(&attr->parent_err, &attr->child_err, + attr->cntxt)) != APR_SUCCESS) { + return status; + } + switch (err) { + case APR_FULL_BLOCK: + ap_block_pipe(attr->child_err); + ap_block_pipe(attr->parent_err); + case APR_PARENT_BLOCK: + ap_block_pipe(attr->parent_err); + case APR_CHILD_BLOCK: + ap_block_pipe(attr->child_err); } } - return APR_SUCCESS; + return APR_SUCCESS; } ap_status_t ap_setprocattr_dir(struct procattr_t *attr, @@ -224,10 +251,17 @@ return errno; } resume_thread(newproc); - ap_close (attr->child_in); - ap_close (attr->child_out); - ap_close (attr->child_err); - + + if (attr->child_in) { + ap_close(attr->child_in); + } + if (attr->child_out) { + ap_close(attr->child_out); + } + if (attr->child_err) { + ap_close(attr->child_err); + } + send_data(newproc, 0, (void*)sp, sizeof(struct send_pipe)); (*new)->tid = newproc;