rbb         99/06/17 08:05:25

  Modified:    apr      configure.in
               apr/include apr_config.h.in
               apr/threadproc/unix Makefile.in proc.c threadproc.h
               include  apr_errno.h
  Added:       apr/threadproc/unix procsup.c
  Log:
  Unix can now create processes that are supposed to be detached.  Not tested,
  but I'll get to that later.
  
  Revision  Changes    Path
  1.22      +1 -1      apache-apr/apr/configure.in
  
  Index: configure.in
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/configure.in,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- configure.in      1999/06/16 11:15:56     1.21
  +++ configure.in      1999/06/17 15:05:17     1.22
  @@ -162,7 +162,7 @@
   AC_FUNC_SETPGRP
   
   dnl Checks for library functions.
  -AC_CHECK_FUNCS(strcasecmp stricmp poll)
  +AC_CHECK_FUNCS(strcasecmp stricmp poll setsid)
   
   dnl Start building stuff from our information
   AC_SUBST(LDLIBS)
  
  
  
  1.8       +2 -1      apache-apr/apr/include/apr_config.h.in
  
  Index: apr_config.h.in
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/include/apr_config.h.in,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- apr_config.h.in   1999/06/15 19:43:26     1.7
  +++ apr_config.h.in   1999/06/17 15:05:19     1.8
  @@ -73,7 +73,8 @@
   #undef HAVE_MMAP
   #undef HAVE_STRCASECMP
   #undef HAVE_STRICMP
  -
  +#undef HAVE_POLL
  +#undef HAVE_SETSID
   /*
    * Known problems with system header files that we can fix.
    */
  
  
  
  1.4       +16 -5     apache-apr/apr/threadproc/unix/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/threadproc/unix/Makefile.in,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Makefile.in       1999/06/15 19:43:48     1.3
  +++ Makefile.in       1999/06/17 15:05:21     1.4
  @@ -17,6 +17,7 @@
   LIB=../libthreadproc.a
   
   OBJS=proc.o \
  +     procsup.o \
        thread.o \
        threadcancel.o \
        threadpriv.o \
  @@ -57,16 +58,26 @@
   # DO NOT REMOVE
   proc.o: proc.c threadproc.h ../../../include/apr_thread_proc.h \
    ../../../include/apr_file_io.h ../../../include/apr_general.h \
  - ../../../include/apr_errno.h ../../file_io/unix/fileio.h
  + $(INCDIR)/apr_config.h ../../../include/apr_errno.h \
  + ../../file_io/unix/fileio.h $(INCDIR)/apr_lib.h \
  + $(INCDIR)/hsregex.h
  +procsup.o: procsup.c threadproc.h ../../../include/apr_thread_proc.h \
  + ../../../include/apr_file_io.h ../../../include/apr_general.h \
  + $(INCDIR)/apr_config.h ../../../include/apr_errno.h \
  + ../../file_io/unix/fileio.h $(INCDIR)/apr_lib.h \
  + $(INCDIR)/hsregex.h
   signals.o: signals.c threadproc.h ../../../include/apr_thread_proc.h \
    ../../../include/apr_file_io.h ../../../include/apr_general.h \
  - ../../../include/apr_errno.h ../../file_io/unix/fileio.h
  + $(INCDIR)/apr_config.h ../../../include/apr_errno.h \
  + ../../file_io/unix/fileio.h
   thread.o: thread.c threadproc.h ../../../include/apr_thread_proc.h \
    ../../../include/apr_file_io.h ../../../include/apr_general.h \
  - ../../../include/apr_errno.h
  + $(INCDIR)/apr_config.h ../../../include/apr_errno.h
   threadcancel.o: threadcancel.c threadproc.h \
    ../../../include/apr_thread_proc.h ../../../include/apr_file_io.h \
  - ../../../include/apr_general.h ../../../include/apr_errno.h
  + ../../../include/apr_general.h $(INCDIR)/apr_config.h \
  + ../../../include/apr_errno.h
   threadpriv.o: threadpriv.c threadproc.h \
    ../../../include/apr_thread_proc.h ../../../include/apr_file_io.h \
  - ../../../include/apr_general.h ../../../include/apr_errno.h
  + ../../../include/apr_general.h $(INCDIR)/apr_config.h \
  + ../../../include/apr_errno.h
  
  
  
  1.18      +7 -0      apache-apr/apr/threadproc/unix/proc.c
  
  Index: proc.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/threadproc/unix/proc.c,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- proc.c    1999/06/16 19:30:19     1.17
  +++ proc.c    1999/06/17 15:05:22     1.18
  @@ -158,6 +158,7 @@
   {
       int i;
       char **newargs;
  +    struct proc_t *pgrp; 
   
       (*new) = (struct proc_t *)ap_palloc(cont, sizeof(struct proc_t));
   
  @@ -209,9 +210,15 @@
                   i++;
               }
               newargs[i + 3] = NULL;
  +            if (attr->detached) {
  +                ap_detach(attr->cntxt, &pgrp);
  +            }
               execve(SHELL_PATH, newargs, env);
           }
           else {
  +            if (attr->detached) {
  +                ap_detach(attr->cntxt, &pgrp);
  +            }
               execve(progname, args, env);
           }
           exit(-1);  /* if we get here, there is a problem, so exit with an */ 
  
  
  
  1.7       +6 -0      apache-apr/apr/threadproc/unix/threadproc.h
  
  Index: threadproc.h
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/threadproc/unix/threadproc.h,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- threadproc.h      1999/05/21 19:53:57     1.6
  +++ threadproc.h      1999/06/17 15:05:23     1.7
  @@ -87,6 +87,7 @@
       ap_file_t *child_err;
       char *currdir;
       ap_int32_t cmdtype;
  +    ap_int32_t detached;
   };
   
   struct proc_t {
  @@ -94,6 +95,11 @@
       pid_t pid;
       struct procattr_t *attr;
   };
  +
  +/*This will move to apr_threadproc.h in time, but I need to figure it out
  + * on windows first.  :)
  + */
  +ap_status_t ap_detach(ap_context_t *, struct proc_t **);
   
   #endif  /* ! THREAD_PROC_H */
   
  
  
  
  1.1                  apache-apr/apr/threadproc/unix/procsup.c
  
  Index: procsup.c
  ===================================================================
  /* ====================================================================
   * Copyright (c) 1999 The Apache Group.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * 4. The names "Apache Server" and "Apache Group" must not be used to
   *    endorse or promote products derived from this software without
   *    prior written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Group.
   * For more information on the Apache Group and the Apache HTTP server
   * project, please see <http://www.apache.org/>.
   *
   */
  
  #include "threadproc.h"
  #include "fileio.h"
  
  #include "apr_config.h"
  #include "apr_thread_proc.h"
  #include "apr_file_io.h"
  #include "apr_general.h"
  #include "apr_lib.h"
  
  ap_status_t ap_detach(ap_context_t *cont, struct proc_t **new)
  {
      int x;
  
      (*new) = (struct proc_t *)ap_palloc(cont, sizeof(struct proc_t));
      (*new)->cntxt = cont;
      (*new)->attr = NULL;
  
      chdir("/");
  #if !defined(MPE) && !defined(OS2) && !defined(TPF)
  /* Don't detach for MPE because child processes can't survive the death of
     the parent. */
      if ((x = fork()) > 0)
          exit(0);
      else if (x == -1) {
          perror("fork");
          fprintf(stderr, "unable to fork new process\n");
          exit(1);  /* we can't do anything here, so just exit. */
      }
      RAISE_SIGSTOP(DETACH);
  #endif
  #if HAVE_SETSID
      if (((*new)->pid = setsid()) == -1) {
          return errno;
      }
  #elif defined(NEXT) || defined(NEWSOS)
      if (setpgrp(0, getpid()) == -1 || ((*new)->pid = getpgrp(0)) == -1) {
          return errno;
      }
  #elif defined(OS2) || defined(TPF)
      /* OS/2 don't support process group IDs */
      (*new)->pid = getpid();
  #elif defined(MPE)
      /* MPE uses negative pid for process group */
       (*new)->pid = -getpid();
  #else
      if (((*new)->pid = setpgrp(getpid(), 0)) == -1) {
          return errno;
      }
  #endif
  
      /* close out the standard file descriptors */
      if (freopen("/dev/null", "r", stdin) == NULL) {
          return APR_ALLSTD;
          /* continue anyhow -- note we can't close out descriptor 0 because we
           * have nothing to replace it with, and if we didn't have a descriptor
           * 0 the next file would be created with that value ... leading to
           * havoc.
           */
      }
      if (freopen("/dev/null", "w", stdout) == NULL) {
          return APR_STDOUT;
      }
       /* We are going to reopen this again in a little while to the error
        * log file, but better to do it twice and suffer a small performance
        * hit for consistancy than not reopen it here.
        */
      if (freopen("/dev/null", "w", stderr) == NULL) {
          return APR_STDERR;
      }
  }
  
  
  
  
  
  1.19      +4 -0      apache-apr/include/apr_errno.h
  
  Index: apr_errno.h
  ===================================================================
  RCS file: /home/cvs/apache-apr/include/apr_errno.h,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- apr_errno.h       1999/06/10 12:15:38     1.18
  +++ apr_errno.h       1999/06/17 15:05:24     1.19
  @@ -401,6 +401,10 @@
   #define APR_CHILD_NOTDONE  5006
   #define APR_TIMEUP         5007
   #define APR_INVALSOCK      5008
  +#define APR_ALLSTD         5009
  +#define APR_STDOUT         5010
  +#define APR_STDERR         5011
  +
   #ifdef __cplusplus
   }
   #endif
  
  
  

Reply via email to