Skip to content
  1. Aug 18, 2017
  2. Aug 17, 2017
  3. Aug 16, 2017
  4. Aug 15, 2017
  5. Aug 06, 2017
  6. Aug 04, 2017
  7. Aug 01, 2017
  8. Jul 30, 2017
  9. Jul 29, 2017
  10. Jul 28, 2017
  11. Jul 24, 2017
  12. Jul 22, 2017
  13. Jul 19, 2017
  14. Jul 18, 2017
  15. Jul 17, 2017
    • Jim Jagielski's avatar
      Merge r1762580, r1762701, r1762702, r1762718, r1762723, r1762742, r1762743,... · b0d9c063
      Jim Jagielski authored
      Merge r1762580, r1762701, r1762702, r1762718, r1762723, r1762742, r1762743, r1774538, r1779354 from trunk:
      
      event: use atomics for *timeout_queue->total since it's updated concurrently,
      and move TO_QUEUE_*() macros to functions.
      
      
      event: add/remove from/to the pollset outside of the critical sections.
      
      We don't need external locking since it's created with APR_POLLSET_THREADSAFE,
      hence reduce those sections to the lowest cycles possible.
      
      A spinlock may be interesting instead of the mutex now, we won't block and the
      TO_QUEUE_*() and process_timeout_queue() operations are fast...
      
      
      
      event: follow up to r1762701: update log tag.
      
      event: avoid unnecessary listener/polling wake ups (context switches) by using
      apr_pollset_wakeup(), when implemented, to signal the listener according to the
      next timers or timeout queues expiry (updated at insert and maintenance time).
      
      
      
      Follow up to r1762718: CHANGES entry.
      
      event: follow up to r1762718.
      We still need to kill kept-alive connections in normal/expiry processing if
      the workers are busy or dying.
      
      
      
      event: follow up to r1762718 and r1762742: put de condition where it belongs.
      
      
      
      event: follow up to r1762718.
      
      On graceful shutdown/restart, kill kept-alive connections before poll()ing
      again, avoiding to wait for their "normal" timers (before being woken up)
      when they remain the last handled connections.
      
      
      
      event: follow up to r1762701.
      Keep QUEUE_APPEND()+pollset_add() or QUEUE_REMOVE()+pollset_remove() atomic.
      
      Otherwise when a worker adds an entry in some queue (e.g. KA, lingering), it
      might race with the listener in the time between the mutex is released and the
      pollset is updated; meanwhile the listener might process the queue and find an
      entry no yet in its pollset.
      
      For the lingering queue, the entry could then have been used after its pool
      destroyed.
      
      Submitted by: ylavic
      Reviewed by: ylavic, icing, jim
      
      
      git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1802146 13f79535-47bb-0310-9956-ffa450edef68
      b0d9c063