You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by bn...@apache.org on 2003/05/20 17:12:57 UTC

cvs commit: httpd-2.0/server/mpm/netware mpm_netware.c

bnicholes    2003/05/20 08:12:57

  Modified:    server/mpm/netware Tag: APACHE_2_0_BRANCH mpm_netware.c
  Log:
  Make sure that bucket allocator for each worker thread is created from a thread
  specific pool.  This prevents multiple threads from trying to clean up the same
  pool at the same time.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.62.2.7  +16 -9     httpd-2.0/server/mpm/netware/mpm_netware.c
  
  Index: mpm_netware.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/mpm/netware/mpm_netware.c,v
  retrieving revision 1.62.2.6
  retrieving revision 1.62.2.7
  diff -u -r1.62.2.6 -r1.62.2.7
  --- mpm_netware.c	26 Mar 2003 19:22:22 -0000	1.62.2.6
  +++ mpm_netware.c	20 May 2003 15:12:57 -0000	1.62.2.7
  @@ -212,12 +212,15 @@
   ap_generation_t volatile ap_my_generation=0;
   
   /* a clean exit from a child with proper cleanup */
  -static void clean_child_exit(int code, int worker_num, apr_pool_t *ptrans, apr_bucket_alloc_t *bucket_alloc) __attribute__ ((noreturn));
  -static void clean_child_exit(int code, int worker_num, apr_pool_t *ptrans, apr_bucket_alloc_t *bucket_alloc)
  +static void clean_child_exit(int code, int worker_num, apr_pool_t *ptrans, 
  +                             apr_bucket_alloc_t *bucket_alloc, apr_pool_t *pthrd) __attribute__ ((noreturn));
  +static void clean_child_exit(int code, int worker_num, apr_pool_t *ptrans, 
  +                             apr_bucket_alloc_t *bucket_alloc, apr_pool_t *pthrd)
   {
       if (!shutdown_pending) {
           apr_bucket_alloc_destroy(bucket_alloc);
           apr_pool_destroy(ptrans);
  +        apr_pool_destroy(pthrd);
       }
   
       atomic_dec (&worker_thread_count);
  @@ -357,7 +360,7 @@
   void worker_main(void *arg)
   {
       ap_listen_rec *lr, *first_lr, *last_lr = NULL;
  -    apr_pool_t *ptrans;
  +    apr_pool_t *ptrans, *pthrd;
       apr_pool_t *pbucket;
       apr_allocator_t *allocator;
       apr_bucket_alloc_t *bucket_alloc;
  @@ -385,7 +388,10 @@
       apr_allocator_owner_set(allocator, ptrans);
       apr_pool_tag(ptrans, "transaction");
   
  -    bucket_alloc = apr_bucket_alloc_create(pmain);
  +    apr_pool_create(&pthrd, pmain);
  +    apr_pool_tag(pthrd, "worker_thrd_pool");
  +
  +    bucket_alloc = apr_bucket_alloc_create(pthrd);
   
       atomic_inc (&worker_thread_count);
   
  @@ -398,7 +404,7 @@
   
           if ((ap_max_requests_per_child > 0
               && requests_this_child++ >= ap_max_requests_per_child)) {
  -            clean_child_exit(0, my_worker_num, ptrans, bucket_alloc);
  +            clean_child_exit(0, my_worker_num, ptrans, bucket_alloc, pthrd);
           }
   
           ap_update_child_status_from_indexes(0, my_worker_num, WORKER_READY, 
  @@ -411,7 +417,7 @@
           for (;;) {
               if (shutdown_pending || restart_pending || (ap_scoreboard_image->servers[0][my_worker_num].status == WORKER_IDLE_KILL)) {
                   DBPRINT1 ("\nThread slot %d is shutting down\n", my_worker_num);
  -                clean_child_exit(0, my_worker_num, ptrans, bucket_alloc);
  +                clean_child_exit(0, my_worker_num, ptrans, bucket_alloc, pthrd);
               }
   
               /* Check the listen queue on all sockets for requests */
  @@ -520,12 +526,13 @@
                           */
                           ap_log_error(APLOG_MARK, APLOG_EMERG, stat, ap_server_conf,
                               "apr_accept: giving up.");
  -                        clean_child_exit(APEXIT_CHILDFATAL, my_worker_num, ptrans, bucket_alloc);
  +                        clean_child_exit(APEXIT_CHILDFATAL, my_worker_num, ptrans, 
  +                                         bucket_alloc, pthrd);
                   }
                   else {
                           ap_log_error(APLOG_MARK, APLOG_ERR, stat, ap_server_conf,
                               "apr_accept: (client socket)");
  -                        clean_child_exit(1, my_worker_num, ptrans, bucket_alloc);
  +                        clean_child_exit(1, my_worker_num, ptrans, bucket_alloc, pthrd);
                   }
               }
           }
  @@ -544,7 +551,7 @@
           }
           request_count++;
       }
  -    clean_child_exit(0, my_worker_num, ptrans, bucket_alloc);
  +    clean_child_exit(0, my_worker_num, ptrans, bucket_alloc, pthrd);
   }