apr-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From r..@apache.org
Subject cvs commit: apr/threadproc/unix signals.c
Date Thu, 12 Apr 2001 18:46:33 GMT
rbb         01/04/12 11:46:33

  Modified:    server/mpm/perchild perchild.c
               server/mpm/threaded threaded.c
               include  apr_thread_proc.h
               threadproc/unix signals.c
  Log:
  Convert the apr_create_signal_thread to apr_signal_thread.  The main
  difference, is that instead of creating a separate thread to listen for
  signals, the thread that calls this function does the listening.  Many
  platforms have issues when the main thread isn't the thread that is
  listening for signals.  Even more platforms complain when the main thread
  dies, but the process doesn't.  This gets the main thread back to being
  the signal handling thread.
  
  Revision  Changes    Path
  1.60      +1 -4      httpd-2.0/server/mpm/perchild/perchild.c
  
  Index: perchild.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/mpm/perchild/perchild.c,v
  retrieving revision 1.59
  retrieving revision 1.60
  diff -u -d -b -w -u -r1.59 -r1.60
  --- perchild.c	2001/04/11 02:01:14	1.59
  +++ perchild.c	2001/04/12 18:46:31	1.60
  @@ -918,7 +918,6 @@
   
       apr_threadattr_create(&worker_thread_attr, pchild);
       apr_threadattr_detach_set(worker_thread_attr, 1);                                 
   
  -    apr_create_signal_thread(&thread, worker_thread_attr, check_signal, pchild);
   
       /* We are creating worker threads right now */
       for (i=0; i < threads_to_start; i++) {
  @@ -928,9 +927,7 @@
           }
       }
   
  -    /* This thread will be be a worker thread too. */
  -    worker_thread(&worker_thread_free_ids[max_threads - 1]);
  -
  +    apr_signal_thread_func(check_signal);
   }
   
   static int make_child(server_rec *s, int slot)
  
  
  
  1.21      +2 -22     httpd-2.0/server/mpm/threaded/threaded.c
  
  Index: threaded.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/mpm/threaded/threaded.c,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -d -b -w -u -r1.20 -r1.21
  --- threaded.c	2001/04/11 02:01:16	1.20
  +++ threaded.c	2001/04/12 18:46:32	1.21
  @@ -650,7 +650,6 @@
   	listensocks[i]=lr->sd;
   
       /* Setup worker threads */
  -
       worker_thread_count = 0;
       apr_lock_create(&worker_thread_count_mutex, APR_MUTEX, APR_INTRAPROCESS,
                       NULL, pchild);
  @@ -658,15 +657,8 @@
                       NULL, pchild);
       apr_threadattr_create(&thread_attr, pchild);
       apr_threadattr_detach_set(thread_attr, 1);
  -
  -    rv = apr_create_signal_thread(&thread, thread_attr, check_signal, pchild);
  -    if (rv != APR_SUCCESS) {
  -        ap_log_error(APLOG_MARK, APLOG_EMERG, rv, ap_server_conf,
  -                     "Couldn't create signal thread");
  -        clean_child_exit(APEXIT_CHILDFATAL);
  -    }
   
  -    for (i=0; i < ap_threads_per_child - 1; i++) {
  +    for (i=0; i < ap_threads_per_child; i++) {
   
   	my_info = (proc_info *)malloc(sizeof(proc_info));
           if (my_info == NULL) {
  @@ -694,20 +686,8 @@
   	/* We let each thread update it's own scoreboard entry.  This is done
   	 * because it let's us deal with tid better.
   	 */
  -    }
  -    my_info = (proc_info *)malloc(sizeof(proc_info));
  -    if (my_info == NULL) {
  -        ap_log_error(APLOG_MARK, APLOG_ALERT, errno, ap_server_conf,
  -                    "malloc: out of memory");
  -        clean_child_exit(APEXIT_CHILDFATAL);
       }
  -    my_info->pid = my_child_num;
  -    my_info->tid = i;
  -    my_info->sd = 0;
  -    apr_pool_create(&my_info->tpool, pchild);
  -    ap_update_child_status(my_child_num, i, SERVER_STARTING, 
  -                           (request_rec *) NULL);
  -    worker_thread(my_info);
  +    apr_signal_thread(check_signal);
   }
   
   static int make_child(server_rec *s, int slot) 
  
  
  
  1.62      +3 -9      apr/include/apr_thread_proc.h
  
  Index: apr_thread_proc.h
  ===================================================================
  RCS file: /home/cvs/apr/include/apr_thread_proc.h,v
  retrieving revision 1.61
  retrieving revision 1.62
  diff -u -d -b -w -u -r1.61 -r1.62
  --- apr_thread_proc.h	2001/04/11 02:01:17	1.61
  +++ apr_thread_proc.h	2001/04/12 18:46:32	1.62
  @@ -598,19 +598,13 @@
   APR_DECLARE(apr_status_t) apr_setup_signal_thread(void);
   
   /**
  - * Create a thread that will listen for signals.  The thread will loop
  + * Make the current thread listen for signals.  This thread will loop
    * forever, calling a provided function whenever it receives a signal.  That
    * functions should return 1 if the signal has been handled, 0 otherwise.
  - * @param td The newly created thread
  - * @param tattr The threadattr to use when creating the thread
    * @param signal_handler The function to call when a signal is received
  - * @param p The pool to use when creating the thread
  - * @deffunc apr_status_t apr_create_signal_thread(apr_thread_t **td, apr_threadattr_t *tattr,
int (*signal_handler)(int signum), apr_pool_t *p)
  + * apr_status_t apr_signal_thread((int)(*signal_handler)(int signum))
    */
  -APR_DECLARE(apr_status_t) apr_create_signal_thread(apr_thread_t **td,
  -                                                   apr_threadattr_t *tattr,
  -                                              int (*signal_handler)(int signum),
  -                                                   apr_pool_t *p);
  +APR_DECLARE(apr_status_t) apr_signal_thread(int(*signal_handler)(int signum));
   #endif /* APR_HAS_THREADS */
   
   #ifdef __cplusplus
  
  
  
  1.33      +2 -10     apr/threadproc/unix/signals.c
  
  Index: signals.c
  ===================================================================
  RCS file: /home/cvs/apr/threadproc/unix/signals.c,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -d -b -w -u -r1.32 -r1.33
  --- signals.c	2001/04/12 16:54:50	1.32
  +++ signals.c	2001/04/12 18:46:32	1.33
  @@ -268,7 +268,7 @@
   #endif /* SYS_SIGLIST_DECLARED */
   
   #if APR_HAS_THREADS && (HAVE_SIGSUSPEND || APR_HAVE_SIGWAIT) && !defined(OS2)
  -static void *signal_thread_func(void *signal_handler)
  +APR_DECLARE(apr_status_t) apr_signal_thread(int(*signal_handler)(int signum))
   {
       sigset_t sig_mask;
       int (*sig_func)(int signum) = (int (*)(int))signal_handler;
  @@ -312,7 +312,7 @@
           }
           
           if (sig_func(signal_received) == 1) {
  -            return NULL;
  +            return APR_SUCCESS;
           }
   #elif HAVE_SIGSUSPEND
   	sigsuspend(&sig_mask);
  @@ -340,14 +340,6 @@
       }
   #endif
       return rv;
  -}
  -
  -APR_DECLARE(apr_status_t) apr_create_signal_thread(apr_thread_t **td, 
  -                                                   apr_threadattr_t *tattr,
  -                                              int (*signal_handler)(int signum),
  -                                                   apr_pool_t *p)
  -{
  -    return apr_thread_create(td, tattr, signal_thread_func, (void *)signal_handler, p);
   }
   
   #endif
  
  
  

Mime
View raw message