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;
   
  
  
  

Reply via email to