You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by rb...@hyperreal.org on 1999/05/12 22:04:40 UTC

cvs commit: apache-apr/apr/test Makefile testsock.c

rbb         99/05/12 13:04:38

  Modified:    include  apr_thread_proc.h
               apr/threadproc/unix proc.c thread.c threadcancel.c
                        threadpriv.c threadproc.h
               apr/test Makefile testsock.c
  Added:       apr/threadproc/unix signals.c
  Log:
  Make thread/process stuff more portable.
  
  Revision  Changes    Path
  1.9       +3 -2      apache-apr/include/apr_thread_proc.h
  
  Index: apr_thread_proc.h
  ===================================================================
  RCS file: /home/cvs/apache-apr/include/apr_thread_proc.h,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- apr_thread_proc.h	1999/05/12 12:00:11	1.8
  +++ apr_thread_proc.h	1999/05/12 20:04:21	1.9
  @@ -56,7 +56,7 @@
   #ifndef APR_THREAD_PROC_H
   #define APR_THREAD_PROC_H
   
  -#include "threadproc.h"
  +#include "apr_file_io.h"
   #include "apr_general.h"
   #include "apr_errno.h"
   
  @@ -77,7 +77,7 @@
   typedef struct proc_t		  ap_proc_t;
   typedef struct procattr_t         ap_procattr_t;
   
  -typedef threadkey_t               ap_key_t;
  +typedef struct threadkey_t        ap_key_t;
   
   typedef void *(*ap_thread_start_t)(void *);
   
  @@ -109,6 +109,7 @@
   ap_proc_t *ap_create_process(ap_context_t *, char *, char *const [], char **, ap_procattr_t *);
   ap_status_t ap_wait_proc(ap_context_t *, ap_proc_t *, ap_wait_how_e);
   
  +void ap_kill(ap_proc_t *, ap_int32_t);
   #ifdef __cplusplus
   }
   #endif
  
  
  
  1.9       +16 -15    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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- proc.c	1999/05/10 15:29:40	1.8
  +++ proc.c	1999/05/12 20:04:23	1.9
  @@ -53,18 +53,19 @@
    *
    */
   
  +#include "threadproc.h"
  +#include "fileio.h"
  +
   #include "apr_thread_proc.h"
   #include "apr_file_io.h"
   #include "apr_general.h"
  -#include "threadproc.h"
  -#include "fileio.h"
   #include <signal.h>
   #include <string.h>
   #include <sys/wait.h>
   
  -ap_procattr_t *ap_createprocattr_init(ap_context_t *cont)
  +struct procattr_t *ap_createprocattr_init(ap_context_t *cont)
   {
  -    ap_procattr_t *new = (ap_procattr_t *)ap_palloc(cont->pool, sizeof(ap_procattr_t));
  +    struct procattr_t *new = (struct procattr_t *)ap_palloc(cont->pool, sizeof(struct procattr_t));
   
       new->parent_in = NULL;
       new->child_in = NULL;
  @@ -77,7 +78,7 @@
       return new;
   }
   
  -ap_status_t ap_setprocattr_io(ap_context_t *cont, ap_procattr_t *attr, ap_int32_t in, 
  +ap_status_t ap_setprocattr_io(ap_context_t *cont, struct procattr_t *attr, ap_int32_t in, 
                                    ap_int32_t out, ap_int32_t err)
   {
       if (in) {
  @@ -112,19 +113,19 @@
       } 
   }
   
  -ap_status_t ap_setprocattr_dir(ap_context_t *cont, ap_procattr_t *attr, 
  +ap_status_t ap_setprocattr_dir(ap_context_t *cont, struct procattr_t *attr, 
                                    char *dir) 
   {
       attr->currdir = strdup(dir);
   }
   
  -ap_status_t ap_setprocattr_cmdtype(ap_context_t *cont, ap_procattr_t *attr,
  +ap_status_t ap_setprocattr_cmdtype(ap_context_t *cont, struct procattr_t *attr,
                                        ap_cmdtype_e cmd) 
   {
       attr->cmdtype = cmd;
   }
   
  -ap_int32_t ap_fork(ap_context_t *cont, ap_proc_t *proc)
  +ap_int32_t ap_fork(ap_context_t *cont, struct proc_t *proc)
   {
       int pid;
   
  @@ -141,11 +142,11 @@
       return 1;
   }
   
  -ap_proc_t *ap_create_process(ap_context_t *cont, char *progname, 
  +struct proc_t *ap_create_process(ap_context_t *cont, char *progname, 
                                  char *const args[], char **env, 
  -                               ap_procattr_t *attr)
  +                               struct procattr_t *attr)
   {
  -    ap_proc_t *new = (ap_proc_t *)ap_palloc(cont->pool, sizeof(ap_proc_t));
  +    struct proc_t *new = (struct proc_t *)ap_palloc(cont->pool, sizeof(struct proc_t));
       int i;
       char **newargs;
   
  @@ -215,22 +216,22 @@
       return new;
   }
   
  -ap_file_t *ap_get_childin(ap_context_t *cont, ap_proc_t *proc)
  +ap_file_t *ap_get_childin(ap_context_t *cont, struct proc_t *proc)
   {
       return proc->attr->parent_in; 
   }
   
  -ap_file_t *ap_get_childout(ap_context_t *cont, ap_proc_t *proc)
  +ap_file_t *ap_get_childout(ap_context_t *cont, struct proc_t *proc)
   {
       return proc->attr->parent_out; 
   }
   
  -ap_file_t *ap_get_childerr(ap_context_t *cont, ap_proc_t *proc)
  +ap_file_t *ap_get_childerr(ap_context_t *cont, struct proc_t *proc)
   {
       return proc->attr->parent_err; 
   }    
   
  -ap_status_t ap_wait_proc(ap_context_t *cont, ap_proc_t *proc, 
  +ap_status_t ap_wait_proc(ap_context_t *cont, struct proc_t *proc, 
                              ap_wait_how_e wait)
   {
       if (!proc)
  
  
  
  1.2       +11 -10    apache-apr/apr/threadproc/unix/thread.c
  
  Index: thread.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/threadproc/unix/thread.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- thread.c	1999/05/10 17:53:03	1.1
  +++ thread.c	1999/05/12 20:04:24	1.2
  @@ -53,20 +53,21 @@
    *
    */
   
  +#include "threadproc.h"
   #include "apr_thread_proc.h"
   #include "apr_general.h"
   
   
  -ap_threadattr_t *ap_create_threadattr(ap_context_t *cont)
  +struct threadattr_t *ap_create_threadattr(ap_context_t *cont)
   {
  -    ap_threadattr_t *new;
  +    struct threadattr_t *new;
     
  -    new = (ap_threadattr_t *)ap_palloc(cont->pool, sizeof(ap_threadattr_t));
  +    new = (struct threadattr_t *)ap_palloc(cont->pool, sizeof(struct threadattr_t));
       new->attr = (pthread_attr_t *)ap_palloc(cont->pool, sizeof(pthread_attr_t));
       pthread_attr_init(new->attr);
   }
   
  -ap_status_t ap_setthreadattr_detach(ap_context_t *cont, ap_threadattr_t *attr, ap_int32_t on)
  +ap_status_t ap_setthreadattr_detach(ap_context_t *cont, struct threadattr_t *attr, ap_int32_t on)
   {
       if (pthread_attr_setdetachstate(attr->attr, on) == 0) {
           return APR_SUCCESS;
  @@ -76,7 +77,7 @@
       }
   }
   
  -ap_status_t ap_getthreadattr_detach(ap_context_t *cont, ap_threadattr_t *attr)
  +ap_status_t ap_getthreadattr_detach(ap_context_t *cont, struct threadattr_t *attr)
   {
       int state;
   
  @@ -86,11 +87,11 @@
       return APR_FAILURE;
   }
   
  -ap_thread_t *ap_create_thread(ap_context_t *cont, ap_threadattr_t *attr, ap_thread_start_t func, void *data)
  +struct thread_t *ap_create_thread(ap_context_t *cont, struct threadattr_t *attr, ap_thread_start_t func, void *data)
   {
  -    ap_thread_t *new;
  +    struct thread_t *new;
   
  -    new = (ap_thread_t *)ap_palloc(cont->pool, sizeof(ap_thread_t));
  +    new = (struct thread_t *)ap_palloc(cont->pool, sizeof(struct thread_t));
   
       if (pthread_create(new->td, attr->attr, func, data) == 0) {
           return new;
  @@ -105,7 +106,7 @@
       pthread_exit(retval);
   }
   
  -ap_status_t ap_thread_join(ap_context_t *cont, ap_thread_t *thd, ap_status_t *retval)
  +ap_status_t ap_thread_join(ap_context_t *cont, struct thread_t *thd, ap_status_t *retval)
   {
       if (pthread_join(*thd->td,(void *)&retval) == 0) {
           return APR_SUCCESS;
  @@ -115,7 +116,7 @@
       }
   }
   
  -ap_status_t ap_thread_detach(ap_context_t *cont, ap_thread_t *thd)
  +ap_status_t ap_thread_detach(ap_context_t *cont, struct thread_t *thd)
   {
       if (pthread_detach(*thd->td) == 0) {
           return APR_SUCCESS;
  
  
  
  1.2       +2 -1      apache-apr/apr/threadproc/unix/threadcancel.c
  
  Index: threadcancel.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/threadproc/unix/threadcancel.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- threadcancel.c	1999/05/10 17:53:03	1.1
  +++ threadcancel.c	1999/05/12 20:04:25	1.2
  @@ -53,11 +53,12 @@
    *
    */
   
  +#include "threadproc.h"
   #include "apr_thread_proc.h"
   #include "apr_general.h"
   
   
  -ap_status_t ap_cancel_thread(ap_context_t *cont, ap_thread_t *thd)
  +ap_status_t ap_cancel_thread(ap_context_t *cont, struct thread_t *thd)
   {
       if (pthread_cancel(*thd->td) == 0) {
           return APR_SUCCESS;
  
  
  
  1.2       +11 -10    apache-apr/apr/threadproc/unix/threadpriv.c
  
  Index: threadpriv.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/threadproc/unix/threadpriv.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- threadpriv.c	1999/05/10 17:53:04	1.1
  +++ threadpriv.c	1999/05/12 20:04:25	1.2
  @@ -53,29 +53,30 @@
    *
    */
   
  +#include "threadproc.h"
   #include "apr_thread_proc.h"
   #include "apr_general.h"
   #include "apr_errno.h"
   
  -ap_key_t *ap_create_thread_private(ap_context_t *cont, void (*dest)(void *))
  +struct threadkey_t *ap_create_thread_private(ap_context_t *cont, void (*dest)(void *))
   {
  -    ap_key_t *key;
  -    key = (ap_key_t *)ap_palloc(cont->pool, sizeof(ap_key_t));
  +    struct threadkey_t *key;
  +    key = (struct threadkey_t *)ap_palloc(cont->pool, sizeof(struct threadkey_t));
   
  -    if (pthread_key_create(key, dest) == 0) {
  +    if (pthread_key_create(&key->key, dest) == 0) {
           return key;
       }
       return NULL;
   }
   
  -void *ap_get_thread_private(ap_context_t *cont, ap_key_t key)
  +void *ap_get_thread_private(ap_context_t *cont, struct threadkey_t *key)
   {
  -    return pthread_getspecific(key);
  +    return pthread_getspecific(key->key);
   }
   
  -ap_status_t ap_set_thread_private(ap_context_t *cont, ap_key_t key, void *priv)
  +ap_status_t ap_set_thread_private(ap_context_t *cont, struct threadkey_t *key, void *priv)
   {
  -    if (pthread_setspecific(key, priv)== 0) {
  +    if (pthread_setspecific(key->key, priv)== 0) {
           return APR_SUCCESS;
       }
       else {
  @@ -83,9 +84,9 @@
       }
   }
   
  -ap_status_t ap_delete_thread_private(ap_context_t *cont, ap_key_t key)
  +ap_status_t ap_delete_thread_private(ap_context_t *cont, struct threadkey_t *key)
   {
  -    if (pthread_key_delete(key) == 0) {
  +    if (pthread_key_delete(key->key) == 0) {
           return APR_SUCCESS; 
       }
       return APR_FAILURE;
  
  
  
  1.4       +4 -2      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.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- threadproc.h	1999/05/10 14:36:36	1.3
  +++ threadproc.h	1999/05/12 20:04:26	1.4
  @@ -68,14 +68,16 @@
   #define PTHREAD_CANCEL_ENABLE       CANCEL_ENABLE; 
   #define PTHREAD_CANCEL_DISABLE      CANCEL_DISABLE;
   
  -typedef pthread_key_t     threadkey_t;
  -
   struct thread_t {
       pthread_t *td;
   };
   
   struct threadattr_t {
       pthread_attr_t *attr;
  +};
  +
  +struct threadkey_t {
  +    pthread_key_t key;
   };
   
   struct procattr_t {
  
  
  
  1.1                  apache-apr/apr/threadproc/unix/signals.c
  
  Index: signals.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
   *    apache@apache.org.
   *
   * 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_thread_proc.h"
  #include "apr_file_io.h"
  #include "apr_general.h"
  #include <signal.h>
  #include <string.h>
  #include <sys/wait.h>
  
  void ap_kill(struct proc_t *proc, int signal)
  {
      kill(proc->pid, signal);
  }
  
  
  
  
  1.12      +1 -1      apache-apr/apr/test/Makefile
  
  Index: Makefile
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/Makefile,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Makefile	1999/05/12 19:46:19	1.11
  +++ Makefile	1999/05/12 20:04:34	1.12
  @@ -17,7 +17,7 @@
   EXTRA_DEPS=
   OSDIR=
   INCDIR=../../include
  -INCLUDES0=-I $(INCDIR) -I../threadproc/unix
  +INCLUDES0=-I $(INCDIR)
   SHELL=/bin/sh
   CC=gcc
   CPP=gcc -E
  
  
  
  1.6       +2 -2      apache-apr/apr/test/testsock.c
  
  Index: testsock.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/apr/test/testsock.c,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- testsock.c	1999/05/12 19:46:19	1.5
  +++ testsock.c	1999/05/12 20:04:35	1.6
  @@ -102,11 +102,11 @@
           continue;
   
       if (s1 == APR_SUCCESS) {
  -        kill(proc2->pid, SIGTERM);
  +        ap_kill(proc2, SIGTERM);
           ap_wait_proc(context, proc2, APR_WAIT);
       }
       else {
  -        kill(proc1->pid, SIGTERM);
  +        ap_kill(proc1, SIGTERM);
           ap_wait_proc(context, proc1, APR_WAIT);
       }
       fprintf(stdout, "Network test completed.\n");