scoreboard.h revision 30c289e6bc6d28d210b21edd800ab2cfc78a8381
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt/* ====================================================================
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * The Apache Software License, Version 1.1
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt *
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * Copyright (c) 2000 The Apache Software Foundation. All rights
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * reserved.
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt *
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * Redistribution and use in source and binary forms, with or without
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * modification, are permitted provided that the following conditions
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * are met:
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt *
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * 1. Redistributions of source code must retain the above copyright
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * notice, this list of conditions and the following disclaimer.
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt *
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * 2. Redistributions in binary form must reproduce the above copyright
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * notice, this list of conditions and the following disclaimer in
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * the documentation and/or other materials provided with the
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * distribution.
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt *
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * 3. The end-user documentation included with the redistribution,
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * if any, must include the following acknowledgment:
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * "This product includes software developed by the
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * Apache Software Foundation (http://www.apache.org/)."
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * Alternately, this acknowledgment may appear in the software itself,
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * if and wherever such third-party acknowledgments normally appear.
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt *
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * 4. The names "Apache" and "Apache Software Foundation" must
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * not be used to endorse or promote products derived from this
3ad0c5d8a4e2e2fa7ffcccd7f3457f577908494eTom Gundersen * software without prior written permission. For written
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * permission, please contact apache@apache.org.
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt *
be3a09b7ffe62b52658e77ae4d6638d1b0dae654Patrik Flykt * 5. Products derived from this software may not be called "Apache",
be3a09b7ffe62b52658e77ae4d6638d1b0dae654Patrik Flykt * nor may "Apache" appear in their name, without prior written
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * permission of the Apache Software Foundation.
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt *
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1c4baffc1895809bae9ac36b670af90a4cb9cd7dTom Gundersen * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
1c4baffc1895809bae9ac36b670af90a4cb9cd7dTom Gundersen * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * SUCH DAMAGE.
be3a09b7ffe62b52658e77ae4d6638d1b0dae654Patrik Flykt * ====================================================================
be3a09b7ffe62b52658e77ae4d6638d1b0dae654Patrik Flykt *
be3a09b7ffe62b52658e77ae4d6638d1b0dae654Patrik Flykt * This software consists of voluntary contributions made by many
be3a09b7ffe62b52658e77ae4d6638d1b0dae654Patrik Flykt * individuals on behalf of the Apache Software Foundation. For more
be3a09b7ffe62b52658e77ae4d6638d1b0dae654Patrik Flykt * information on the Apache Software Foundation, please see
be3a09b7ffe62b52658e77ae4d6638d1b0dae654Patrik Flykt * <http://www.apache.org/>.
be3a09b7ffe62b52658e77ae4d6638d1b0dae654Patrik Flykt *
be3a09b7ffe62b52658e77ae4d6638d1b0dae654Patrik Flykt * Portions of this software are based upon public domain software
be3a09b7ffe62b52658e77ae4d6638d1b0dae654Patrik Flykt * originally written at the National Center for Supercomputing Applications,
e53fc357a9bb9d0a5362ccc4246d598cb0febd5eLennart Poettering * University of Illinois, Urbana-Champaign.
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#ifndef APACHE_SCOREBOARD_H
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#define APACHE_SCOREBOARD_H
200a0868fcdf7b95f3d8d1fda3aa2aef48d84fddTom Gundersen#include <pthread.h>
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#ifdef __cplusplus
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flyktextern "C" {
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#endif
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt
36c32f6120a0c3fe19be5aeaa1926e179e8c29baTom Gundersen#ifdef HAVE_SYS_TIMES_H
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#include <sys/time.h>
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#include <sys/times.h>
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#elif defined(TPF)
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#include <time.h>
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#endif
f0213e3796b4dd66e546e2de4d677db319f9171bTom Gundersen
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#include "mpm_default.h" /* For HARD_.*_LIMIT */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt/* The optimized timeout code only works if we're not using a scoreboard file
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#if (defined (USE_MMAP_SCOREBOARD) || defined (USE_SHMGET_SCOREBOARD))
851c9f82736c89d423b244a292e153ec7124d309Patrik Flykt#define OPTIMIZE_TIMEOUTS
851c9f82736c89d423b244a292e153ec7124d309Patrik Flykt#endif
be3a09b7ffe62b52658e77ae4d6638d1b0dae654Patrik Flykt
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt/* Scoreboard info on a process is, for now, kept very brief ---
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * just status value and pid (the latter so that the caretaker process
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * can properly update the scoreboard when a process dies). We may want
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * to eventually add a separate set of long_score structures which would
f2341e0a87cab1558c84c933956e9181d5fb6c52Lennart Poettering * give, for each process, the number of requests serviced, and info on
4d7b83da7b78647f4ba3f1d6fa2dc8d7b9833d93Tom Gundersen * the current, or most recent, request.
4d7b83da7b78647f4ba3f1d6fa2dc8d7b9833d93Tom Gundersen *
f2341e0a87cab1558c84c933956e9181d5fb6c52Lennart Poettering * Status values:
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt */
6666907869fb3bc7fe6a6025540db5b887c7a78bTom Gundersen
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#define SERVER_DEAD 0
f2341e0a87cab1558c84c933956e9181d5fb6c52Lennart Poettering#define SERVER_STARTING 1 /* Server Starting up */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#define SERVER_READY 2 /* Waiting for connection (or accept() lock) */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#define SERVER_BUSY_READ 3 /* Reading a client request */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#define SERVER_BUSY_WRITE 4 /* Processing a client request */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#define SERVER_BUSY_KEEPALIVE 5 /* Waiting for more requests via keepalive */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#define SERVER_BUSY_LOG 6 /* Logging the request */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#define SERVER_BUSY_DNS 7 /* Looking up a hostname */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#define SERVER_GRACEFUL 8 /* server is gracefully finishing request */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#define SERVER_ACCEPTING 9 /* thread is accepting connections */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#define SERVER_QUEUEING 10 /* thread is putting connection on the queue */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#define SERVER_NUM_STATUS 11 /* number of status settings */
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt/* A "virtual time" is simply a counter that indicates that a child is
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * making progress. The parent checks up on each child, and when they have
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * made progress it resets the last_rtime element. But when the child hasn't
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * made progress in a time that's roughly timeout_len seconds long, it is
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * sent a SIGALRM.
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt *
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * vtime is an optimization that is used only when the scoreboard is in
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * shared memory (it's not easy/feasible to do it in a scoreboard file).
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * The essential observation is that timeouts rarely occur, the vast majority
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * of hits finish before any timeout happens. So it really sucks to have to
4d7b83da7b78647f4ba3f1d6fa2dc8d7b9833d93Tom Gundersen * ask the operating system to set up and destroy alarms many times during
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * a request.
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt */
e53fc357a9bb9d0a5362ccc4246d598cb0febd5eLennart Poetteringtypedef unsigned vtime_t;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt/* Type used for generation indicies. Startup and every restart cause a
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * new generation of children to be spawned. Children within the same
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * generation share the same configuration information -- pointers to stuff
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * created at config time in the parent are valid across children. For
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * example, the vhostrec pointer in the scoreboard below is valid in all
36c32f6120a0c3fe19be5aeaa1926e179e8c29baTom Gundersen * children of the same generation.
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt *
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * The safe way to access the vhost pointer is like this:
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt *
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * short_score *ss = pointer to whichver slot is interesting;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * parent_score *ps = pointer to whichver slot is interesting;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * server_rec *vh = ss->vhostrec;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt *
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * if (ps->generation != ap_my_generation) {
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * vh = NULL;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt * }
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt *
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * then if vh is not NULL it's valid in this child.
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt *
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * This avoids various race conditions around restarts.
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt */
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykttypedef int ap_generation_t;
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt/* stuff which is thread specific */
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykttypedef struct {
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt#ifdef OPTIMIZE_TIMEOUTS
10c9ce615d98e125bc520efa94aebaef250a4061David Herrmann vtime_t cur_vtime; /* the child's current vtime */
10c9ce615d98e125bc520efa94aebaef250a4061David Herrmann unsigned short timeout_len; /* length of the timeout */
10c9ce615d98e125bc520efa94aebaef250a4061David Herrmann#endif
18d29550b5fbc4b0de334b8212d05decdd131f1bPatrik Flykt pthread_t tid;
18d29550b5fbc4b0de334b8212d05decdd131f1bPatrik Flykt unsigned char status;
18d29550b5fbc4b0de334b8212d05decdd131f1bPatrik Flykt unsigned long access_count;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt unsigned long bytes_served;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt unsigned long my_access_count;
10c9ce615d98e125bc520efa94aebaef250a4061David Herrmann unsigned long my_bytes_served;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt unsigned long conn_bytes;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt unsigned short conn_count;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#ifndef HAVE_GETTIMEOFDAY
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt clock_t start_time;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt clock_t stop_time;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#else
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt struct timeval start_time;
10c9ce615d98e125bc520efa94aebaef250a4061David Herrmann struct timeval stop_time;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#endif
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#ifdef HAVE_TIMES
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt struct tms times;
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#endif
c62c4628d9dbc27effd36143c75abe528f561867Patrik Flykt#ifndef OPTIMIZE_TIMEOUTS
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt time_t last_used;
18d29550b5fbc4b0de334b8212d05decdd131f1bPatrik Flykt#endif
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt char client[32]; /* Keep 'em small... */
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt char request[64]; /* We just want an idea... */
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt server_rec *vhostrec; /* What virtual host is being accessed? */
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt /* SEE ABOVE FOR SAFE USAGE! */
e53fc357a9bb9d0a5362ccc4246d598cb0febd5eLennart Poettering} thread_score;
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt
e53fc357a9bb9d0a5362ccc4246d598cb0febd5eLennart Poetteringtypedef struct {
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt ap_generation_t running_generation; /* the generation of children which
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt * should still be serving requests. */
18d29550b5fbc4b0de334b8212d05decdd131f1bPatrik Flykt} global_score;
8012cd391932d58b44332df106d426a360faf0a6Tom Gundersen
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt/* stuff which the parent generally writes and the children rarely read */
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykttypedef struct {
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt pid_t pid;
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt ap_generation_t generation; /* generation of this child */
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt int worker_threads;
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt#ifdef OPTIMIZE_TIMEOUTS
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt time_t last_rtime; /* time(0) of the last change */
4d7b83da7b78647f4ba3f1d6fa2dc8d7b9833d93Tom Gundersen vtime_t last_vtime; /* the last vtime the parent has seen */
4d7b83da7b78647f4ba3f1d6fa2dc8d7b9833d93Tom Gundersen#endif
4d7b83da7b78647f4ba3f1d6fa2dc8d7b9833d93Tom Gundersen} parent_score;
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt
18d29550b5fbc4b0de334b8212d05decdd131f1bPatrik Flykttypedef struct {
18d29550b5fbc4b0de334b8212d05decdd131f1bPatrik Flykt thread_score servers[HARD_SERVER_LIMIT][HARD_THREAD_LIMIT];
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt parent_score parent[HARD_SERVER_LIMIT];
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt global_score global;
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt} scoreboard;
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt
e53fc357a9bb9d0a5362ccc4246d598cb0febd5eLennart Poettering#define KEY_LENGTH 16
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt#define VALUE_LENGTH 64
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykttypedef struct {
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt char key[KEY_LENGTH];
4d7b83da7b78647f4ba3f1d6fa2dc8d7b9833d93Tom Gundersen char value[VALUE_LENGTH];
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt} status_table_entry;
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt
e53fc357a9bb9d0a5362ccc4246d598cb0febd5eLennart Poettering#define STATUSES_PER_CONNECTION 10
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykttypedef struct {
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt status_table_entry
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt table[HARD_SERVER_LIMIT*HARD_THREAD_LIMIT][STATUSES_PER_CONNECTION];
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt} new_scoreboard;
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt
e53fc357a9bb9d0a5362ccc4246d598cb0febd5eLennart Poettering#define SCOREBOARD_SIZE sizeof(scoreboard)
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt#define NEW_SCOREBOARD_SIZE sizeof(new_scoreboard)
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt#ifdef TPF
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt#define SCOREBOARD_NAME "SCOREBRD"
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt#define SCOREBOARD_FRAMES SCOREBOARD_SIZE/4095 + 1
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt#endif
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt
e66040417b52be98d41ba1230f25dea65147e8eePatrik FlyktAPI_EXPORT(int) ap_exists_scoreboard_image(void);
e53fc357a9bb9d0a5362ccc4246d598cb0febd5eLennart Poetteringvoid reinit_scoreboard(ap_pool_t *p);
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flyktvoid cleanup_scoreboard(void);
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik FlyktAPI_EXPORT(void) ap_sync_scoreboard_image(void);
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flyktvoid ap_mpmt_pthread_force_reset_connection_status(long conn_id);
18d29550b5fbc4b0de334b8212d05decdd131f1bPatrik Flykt
18d29550b5fbc4b0de334b8212d05decdd131f1bPatrik Flykt
18d29550b5fbc4b0de334b8212d05decdd131f1bPatrik Flykt#if defined(USE_OS2_SCOREBOARD)
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flyktcaddr_t create_shared_heap(const char *name, size_t size);
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flyktcaddr_t get_shared_heap(const char *Name);
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt#elif defined(USE_POSIX_SCOREBOARD)
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flyktstatic void cleanup_shared_mem(void *d);
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt#endif
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik FlyktAPI_EXPORT(void) reopen_scoreboard(ap_pool_t *p);
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flyktap_inline void ap_sync_scoreboard_image(void);
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flyktvoid increment_counts(int child_num, int thread_num, request_rec *r);
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flyktvoid update_scoreboard_global(void);
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik FlyktAPI_EXPORT(int) find_child_by_pid(ap_proc_t *pid);
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flyktint ap_update_child_status(int child_num, int thread_num, int status, request_rec *r);
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flyktvoid ap_time_process_request(int child_num, int thread_num, int status);
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik FlyktAPI_EXPORT_VAR extern scoreboard *ap_scoreboard_image;
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt
e66040417b52be98d41ba1230f25dea65147e8eePatrik FlyktAPI_EXPORT_VAR extern ap_generation_t volatile ap_my_generation;
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt/* for time_process_request() in http_main.c */
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt#define START_PREQUEST 1
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt#define STOP_PREQUEST 2
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt
5c79bd79839f1e50bd3c34a0670037f7965ca5a4Patrik Flykt#ifdef __cplusplus
4d7b83da7b78647f4ba3f1d6fa2dc8d7b9833d93Tom Gundersen}
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt#endif
85bd849f09aceb7f972a0697494ea22b2247a5d7Patrik Flykt
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt#endif /* !APACHE_SCOREBOARD_H */
e66040417b52be98d41ba1230f25dea65147e8eePatrik Flykt