manoj       99/07/21 15:18:32

  Modified:    mpm/src/modules/mpm/dexter dexter.c
  Log:
  Cleanups and fixes. Get rid of more stuff having to do with scoreboard
  slots in the children. Also squashes a couple of bugs.
  
  Revision  Changes    Path
  1.3       +22 -40    apache-2.0/mpm/src/modules/mpm/dexter/dexter.c
  
  Index: dexter.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/mpm/src/modules/mpm/dexter/dexter.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -d -u -r1.2 -r1.3
  --- dexter.c  1999/07/21 20:44:41     1.2
  +++ dexter.c  1999/07/21 22:18:30     1.3
  @@ -89,14 +89,6 @@
   static int num_listenfds = 0;
   static struct pollfd *listenfds;
   
  -/* The structure used to pass unique initialization info to each thread */
  -typedef struct {
  -    int pid;
  -    int tid;
  -    int sd;
  -    pool *tpool; /* "pthread" would be confusing */
  -} proc_info;
  -
   #if 0
   #define SAFE_ACCEPT(stmt) do {if (ap_listeners->next != NULL) {stmt;}} while 
(0)
   #else
  @@ -795,7 +787,7 @@
    * Child process main loop.
    */
   
  -static void process_socket(pool *p, struct sockaddr *sa_client, int csd, int 
my_child_num, int my_thread_num)
  +static void process_socket(pool *p, struct sockaddr *sa_client, int csd)
   {
       struct sockaddr sa_server; /* ZZZZ */
       size_t len = sizeof(struct sockaddr);
  @@ -833,17 +825,14 @@
       current_conn = ap_new_connection(p, server_conf, conn_io,
                                     (const struct sockaddr_in *) sa_client, 
                                     (const struct sockaddr_in *) &sa_server, 
  -                                  my_child_num, my_thread_num);
  +                                  0, 0);
   
       ap_process_connection(current_conn);
   }
   
  -static void * worker_thread(void * dummy)
  +static void * worker_thread(void *thread_pool)
   {
  -    proc_info * ti = dummy;
  -    int process_slot = ti->pid;
  -    int thread_slot = ti->tid;
  -    pool *tpool = ti->tpool;
  +    pool *tpool = thread_pool;
       struct sockaddr sa_client;
       int csd = -1;
       pool *ptrans;            /* Pool for per-transaction stuff */
  @@ -854,8 +843,6 @@
       int curr_pollfd, last_pollfd = 0;
       size_t len = sizeof(struct sockaddr);
   
  -    free(ti);
  -
       ptrans = ap_make_sub_pool(tpool);
   
       pthread_mutex_lock(&worker_thread_count_mutex);
  @@ -935,11 +922,17 @@
               }
           }
       got_fd:
  -        SAFE_ACCEPT(accept_mutex_off(0));
  -        SAFE_ACCEPT(intra_mutex_off(0));
  -        if (workers_may_exit) break;
  -        csd = ap_accept(sd, &sa_client, &len);
  -        process_socket(ptrans, &sa_client, csd, process_slot, thread_slot);
  +        if (!workers_may_exit) {
  +            csd = ap_accept(sd, &sa_client, &len);
  +            SAFE_ACCEPT(accept_mutex_off(0));
  +            SAFE_ACCEPT(intra_mutex_off(0));
  +     } else {
  +            SAFE_ACCEPT(accept_mutex_off(0));
  +            SAFE_ACCEPT(intra_mutex_off(0));
  +         break;
  +     }
  +
  +        process_socket(ptrans, &sa_client, csd);
           ap_clear_pool(ptrans);
           requests_this_child--;
       }
  @@ -957,15 +950,14 @@
       return NULL;
   }
   
  -static void child_main(int child_num_arg)
  +static void child_main(void)
   {
       sigset_t sig_mask;
       int signal_received;
       pthread_t thread;
       pthread_attr_t thread_attr;
       int i;
  -    int my_child_num = child_num_arg;
  -    proc_info *my_info = NULL;
  +    pool *tpool;
       ap_listen_rec *lr;
   
       my_pid = getpid();
  @@ -1012,20 +1004,10 @@
       pthread_attr_init(&thread_attr);
       pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
       for (i=0; i < ap_threads_per_child; i++) {
  -
  -     my_info = (proc_info *)malloc(sizeof(proc_info));
  -        if (my_info == NULL) {
  -            ap_log_error(APLOG_MARK, APLOG_ALERT, 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;
  -     my_info->tpool = ap_make_sub_pool(pchild);
  +     tpool = ap_make_sub_pool(pchild);
        
        /* We are creating threads right now */
  -     if (pthread_create(&thread, &thread_attr, worker_thread, my_info)) {
  +     if (pthread_create(&thread, &thread_attr, worker_thread, tpool)) {
            ap_log_error(APLOG_MARK, APLOG_ALERT, server_conf,
                         "pthread_create: unable to create worker thread");
               /* In case system resources are maxxed out, we don't want
  @@ -1072,7 +1054,7 @@
       if (one_process) {
        set_signals();
           ap_scoreboard_image[slot].pid = getpid();
  -     child_main(slot);
  +     child_main();
       }
   
       if ((pid = fork()) == -1) {
  @@ -1103,7 +1085,7 @@
        /* XXX - For an unthreaded server, a signal handler will be necessary
           signal(SIGTERM, just_die);
        */
  -        child_main(slot);
  +        child_main();
   
        return 0;
       }
  @@ -1118,7 +1100,7 @@
       int i;
   
       for (i = 0; number_to_start && i < ap_num_daemons; ++i) {
  -     if (ap_scoreboard_image[i].pid != 0) {
  +     if (ap_scoreboard_image[i].status != SERVER_DEAD) {
            continue;
        }
        if (make_child(server_conf, i, 0) < 0) {
  
  
  

Reply via email to