httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aa...@apache.org
Subject cvs commit: httpd-2.0/server/mpm/experimental/threadpool threadpool.c
Date Sun, 28 Apr 2002 21:35:13 GMT
aaron       02/04/28 14:35:13

  Modified:    server/mpm/experimental/threadpool threadpool.c
  Log:
  When we signal a condition variable, we need to own the lock that
  is associated with that condition variable. This isn't necessary
  for Solaris, but for Posix it is.
  
  Revision  Changes    Path
  1.2       +10 -3     httpd-2.0/server/mpm/experimental/threadpool/threadpool.c
  
  Index: threadpool.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/server/mpm/experimental/threadpool/threadpool.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- threadpool.c	16 Apr 2002 23:37:06 -0000	1.1
  +++ threadpool.c	28 Apr 2002 21:35:12 -0000	1.2
  @@ -939,10 +939,13 @@
                   signal_threads(ST_GRACEFUL);
               }
               if (csd != NULL) {
  -                worker->csd = (apr_socket_t *)csd;
  +                /* Wake up the sleeping worker. */
                   apr_thread_mutex_lock(worker->mutex);
  -                apr_thread_mutex_unlock(worker->mutex);
  +                worker->csd = (apr_socket_t *)csd;
  +                /* We must own the lock associated with the condition
  +                 * variable that we are signaling. */
                   apr_thread_cond_signal(worker->cond);
  +                apr_thread_mutex_unlock(worker->mutex);
                   worker = NULL;
               }
           }
  @@ -962,8 +965,10 @@
       worker_stack_interrupt_all(idle_worker_stack);
       if (worker) {
           apr_thread_mutex_lock(worker->mutex);
  -        apr_thread_mutex_unlock(worker->mutex);
  +        /* We must own the lock associated with the condition
  +         * variable that we are signaling. */
           apr_thread_cond_signal(worker->cond);
  +        apr_thread_mutex_unlock(worker->mutex);
       }
       dying = 1;
       ap_scoreboard_image->parent[process_slot].quiescing = 1;
  @@ -1003,6 +1008,8 @@
       apr_pool_create_ex(&ptrans, NULL, NULL, allocator);
       apr_allocator_set_owner(allocator, ptrans);
   
  +    /* XXX: What happens if this is allocated from the
  +     * single-thread-optimized ptrans pool? -aaron */
       bucket_alloc = apr_bucket_alloc_create(tpool);
   
       wakeup = (worker_wakeup_info *)apr_palloc(tpool, sizeof(*wakeup));
  
  
  

Mime
View raw message