expcov report - Generated Sat Oct 15 21:39:18 2016

 Index  Statistics  Last 
Directory./server
Filenamempm_common.c
ModifiedSun Feb 17 07:51:16 2013

Pass Half Fail Excluded Total
Function
1
3.12%
31
96.88%
0
0.00%
32
100%
Expressions
22
4.20%
502
95.80%
0
0.00%
524
100%
Conditions
0
0.00%
5
5.15%
92
94.85%
0
0.00%
97
100%
MC/DC
0
0.00%
19
100.00%
0
0.00%
19
100%
Branches

if
0
0.00%
2
2.35%
83
97.65%
0
0.00%
85
100%
for
0
0.00%
0
0.00%
3
100.00%
0
0.00%
3
100%
while
0
0.00%
2
33.33%
4
66.67%
0
0.00%
6
100%
case
0
0.00%
0
0.00%
11
100.00%
0
0.00%
11
100%

1/* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements.  See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License.  You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/* The purpose of this file is to store the code that MOST mpm's will need
18 * this does not mean a function only goes into this file if every MPM needs
19 * it.  It means that if a function is needed by more than one MPM, and
20 * future maintenance would be served by making the code common, then the
21 * function belongs here.
22 *
23 * This is going in src/main because it is not platform specific, it is
24 * specific to multi-process servers, but NOT to Unix.  Which is why it
25 * does not belong in src/os/unix
26 */
27
28#include "apr.h"
29#include "apr_thread_proc.h"
30#include "apr_signal.h"
31#include "apr_strings.h"
32#define APR_WANT_STRFUNC
33#include "apr_want.h"
34#include "apr_getopt.h"
35#include "apr_optional.h"
36#include "apr_allocator.h"
37
38#include "httpd.h"
39#include "http_config.h"
40#include "http_log.h"
41#include "http_main.h"
42#include "mpm.h"
43#include "mpm_common.h"
44#include "ap_mpm.h"
45#include "ap_listen.h"
46#include "mpm_default.h"
47
48#ifdef AP_MPM_WANT_SET_SCOREBOARD
49#include "scoreboard.h"
50#endif
51
52#ifdef HAVE_PWD_H
53#include <pwd.h>
54#endif
55#ifdef HAVE_GRP_H
56#include <grp.h>
57#endif
58#if APR_HAVE_UNISTD_H
59#include <unistd.h>
60#endif
61
62#if AP_ENABLE_EXCEPTION_HOOK
63APR_HOOK_STRUCT(
64    APR_HOOK_LINK(fatal_exception)
65    APR_HOOK_LINK(monitor)
66)
67AP_IMPLEMENT_HOOK_RUN_ALL(int, fatal_exception,
68                          (ap_exception_info_t *ei), (ei), OK, DECLINED)
69#else
70APR_HOOK_STRUCT(
71    APR_HOOK_LINK(monitor)
72)
73#endif
74AP_IMPLEMENT_HOOK_RUN_ALL(int, monitor,
75                          (apr_pool_t *p), (p : server/mpm_common.c line=75 column=40
p
), OK, DECLINED)
76
77
78#ifdef AP_MPM_WANT_RECLAIM_CHILD_PROCESSES
79
80typedef enum {DO_NOTHING, SEND_SIGTERM, SEND_SIGKILL, GIVEUP} action_t;
81
82typedef struct extra_process_t {
83    struct extra_process_t *next;
84    pid_t pid;
85} extra_process_t;
86
87static extra_process_t *extras;
88
89void ap_register_extra_mpm_process : call=0
a
p_register_extra_mpm_process(pid_t pid)
90{
91    extra_process_t *p = (extra_process_t *)malloc : enter=0, leave=0

malloc : /usr/include/stdlib.h line=471 column=14
m
alloc(sizeof(extra_process_t));
92
93    p : server/mpm_common.c line=91 column=22
p
-> : enter=0, leave=0
-
>next : server/mpm_common.c line=83 column=29
n
ext = : enter=0, leave=0
=
 extras : server/mpm_common.c line=87 column=25
e
xtras;
94    p : server/mpm_common.c line=91 column=22
p
-> : enter=0, leave=0
-
>pid : server/mpm_common.c line=84 column=11
p
id = : enter=0, leave=0
=
 pid : server/mpm_common.c line=89 column=42
p
id;
95    extras : server/mpm_common.c line=87 column=25
e
xtras = : pass=0
=
 p : server/mpm_common.c line=91 column=22
p
;
96}
97
98int ap_unregister_extra_mpm_process : call=0
a
p_unregister_extra_mpm_process(pid_t pid)
99{
100    extra_process_t *cur = extras : server/mpm_common.c line=87 column=25
e
xtras;
101    extra_process_t *prev = NULL;
102
103    while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0

cur : server/mpm_common.c line=100 column=22
cTF
ur && : true=0, false=0
&
cur : server/mpm_common.c line=100 column=22
c
ur-> : enter=0, leave=0
-
>pid : server/mpm_common.c line=84 column=11
p
id != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
pid : server/mpm_common.c line=98 column=43
p
id) {
104        prev : server/mpm_common.c line=101 column=22
p
rev = : pass=0
=
 cur : server/mpm_common.c line=100 column=22
c
ur;
105        cur : server/mpm_common.c line=100 column=22
c
ur = : pass=0
=
 cur : server/mpm_common.c line=100 column=22
c
ur-> : enter=0, leave=0
-
>next : server/mpm_common.c line=83 column=29
n
ext;
106    }
107
108    if : true=0, false=0
i
f (cur : server/mpm_common.c line=100 column=22
c
ur) {
109        if : true=0, false=0
i
f (prev : server/mpm_common.c line=101 column=22
p
rev) {
110            prev : server/mpm_common.c line=101 column=22
p
rev-> : enter=0, leave=0
-
>next : server/mpm_common.c line=83 column=29
n
ext = : enter=0, leave=0
=
 cur : server/mpm_common.c line=100 column=22
c
ur-> : enter=0, leave=0
-
>next : server/mpm_common.c line=83 column=29
n
ext;
111        }
112        else {
113            extras : server/mpm_common.c line=87 column=25
e
xtras = : pass=0
=
 cur : server/mpm_common.c line=100 column=22
c
ur-> : enter=0, leave=0
-
>next : server/mpm_common.c line=83 column=29
n
ext;
114        }
115        free : enter=0, leave=0

free : /usr/include/stdlib.h line=488 column=13
f
ree(cur : server/mpm_common.c line=100 column=22
c
ur);
116        return : pass=0
r
eturn 1; /* found */
117    }
118    else {
119        /* we don't know about any such process */
120        return : pass=0
r
eturn 0;
121    }
122}
123
124static int reclaim_one_pid : call=0
r
eclaim_one_pid(pid_t pid, action_t action)
125{
126    apr_proc_t proc;
127    apr_status_t waitret;
128
129    /* Ensure pid sanity. */
130    if : true=0, false=0
i
f (pid : server/mpm_common.c line=124 column=34
p
id < : true=0, false=0
<
 1) {
131        return : pass=0
r
eturn 1;
132    }        
133
134    proc : server/mpm_common.c line=126 column=16
p
roc.pid : /usr/include/apr-1/apr_thread_proc.h line=135 column=11 pid = : pass=0
=
 pid : server/mpm_common.c line=124 column=34
p
id;
135    waitret : server/mpm_common.c line=127 column=18
w
aitret = : pass=0
=
 apr_proc_wait : enter=0, leave=0

apr_proc_wait : /usr/include/apr-1/apr_thread_proc.h line=641 column=27
a
pr_proc_wait(&proc : server/mpm_common.c line=126 column=16
p
roc, NULL, NULL, APR_NOWAIT : /usr/include/apr-1/apr_thread_proc.h line=57 column=5 APR_NOWAIT);
136    if : true=0, false=0
i
f (waitret : server/mpm_common.c line=127 column=18
w
aitret != : true=0, false=0
!
= APR_CHILD_NOTDONE) {
137        return : pass=0
r
eturn 1;
138    }
139
140    switch : pass=0
s
witch(action : server/mpm_common.c line=124 column=48
a
ction) {
141    case : true=0, false=0
c
ase DO_NOTHING:
142        break : pass=0
b
reak;
143
144    case : true=0, false=0
c
ase SEND_SIGTERM:
145        /* ok, now it's being annoying */
146        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_WARNING,
147                     0, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
148                     "child process %" APR_PID_T_FMT
149                     " still did not exit, "
150                     "sending a SIGTERM",
151                     pid : server/mpm_common.c line=124 column=34
p
id);
152        kill : enter=0, leave=0

kill : /usr/include/signal.h line=126 column=12
k
ill(pid : server/mpm_common.c line=124 column=34
p
id, SIGTERM);
153        break : pass=0
b
reak;
154
155    case : true=0, false=0
c
ase SEND_SIGKILL:
156        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_ERR,
157                     0, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
158                     "child process %" APR_PID_T_FMT
159                     " still did not exit, "
160                     "sending a SIGKILL",
161                     pid : server/mpm_common.c line=124 column=34
p
id);
162#ifndef BEOS
163        kill : enter=0, leave=0

kill : /usr/include/signal.h line=126 column=12
k
ill(pid : server/mpm_common.c line=124 column=34
p
id, SIGKILL);
164#else
165        /* sending a SIGKILL kills the entire team on BeOS, and as
166         * httpd thread is part of that team it removes any chance
167         * of ever doing a restart.  To counter this I'm changing to
168         * use a kinder, gentler way of killing a specific thread
169         * that is just as effective.
170         */
171        kill_thread(pid);
172#endif
173        break : pass=0
b
reak;
174
175    case : true=0, false=0
c
ase GIVEUP:
176        /* gave it our best shot, but alas...  If this really
177         * is a child we are trying to kill and it really hasn't
178         * exited, we will likely fail to bind to the port
179         * after the restart.
180         */
181        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_ERR,
182                     0, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
183                     "could not make child process %" APR_PID_T_FMT
184                     " exit, "
185                     "attempting to continue anyway",
186                     pid : server/mpm_common.c line=124 column=34
p
id);
187        break : pass=0
b
reak;
188    }
189
190    return : pass=0
r
eturn 0;
191}
192
193void ap_reclaim_child_processes : call=0
a
p_reclaim_child_processes(int terminate)
194{
195    apr_time_t waittime = 1024 * : pass=0
*
 16;
196    int i;
197    extra_process_t *cur_extra;
198    int not_dead_yet;
199    int max_daemons;
200    apr_time_t starttime = apr_time_now : enter=0, leave=0

apr_time_now : /usr/include/apr-1/apr_time.h line=85 column=25
a
pr_time_now();
201    /* this table of actions and elapsed times tells what action is taken
202     * at which elapsed time from starting the reclaim
203     */
204    struct {
205        action_t action;
206        apr_time_t action_time;
207    } action_table[] = {
208        {DO_NOTHING : server/mpm_common.c line=80 column=15
D
O_NOTHING, 0}, /* dummy entry for iterations where we reap
209                          * children but take no action against
210                          * stragglers
211                          */
212        {SEND_SIGTERM : server/mpm_common.c line=80 column=27
S
END_SIGTERM, apr_time_from_sec(3)},
213        {SEND_SIGTERM : server/mpm_common.c line=80 column=27
S
END_SIGTERM, apr_time_from_sec(5)},
214        {SEND_SIGTERM : server/mpm_common.c line=80 column=27
S
END_SIGTERM, apr_time_from_sec(7)},
215        {SEND_SIGKILL : server/mpm_common.c line=80 column=41
S
END_SIGKILL, apr_time_from_sec(9)},
216        {GIVEUP : server/mpm_common.c line=80 column=55
G
IVEUP,       apr_time_from_sec(10)}
217    };
218    int cur_action;      /* index of action we decided to take this
219                          * iteration
220                          */
221    int next_action = 1; /* index of first real action */
222
223    ap_mpm_query : enter=0, leave=0

ap_mpm_query : include/ap_mpm.h line=161 column=26
a
p_mpm_query(AP_MPMQ_MAX_DAEMON_USED, &max_daemons : server/mpm_common.c line=199 column=9
m
ax_daemons);
224
225    do {
226        apr_sleep : enter=0, leave=0

apr_sleep : /usr/include/apr-1/apr_time.h line=178 column=19
a
pr_sleep(waittime : server/mpm_common.c line=195 column=16
w
aittime);
227        /* don't let waittime get longer than 1 second; otherwise, we don't
228         * react quickly to the last child exiting, and taking action can
229         * be delayed
230         */
231        waittime : server/mpm_common.c line=195 column=16
w
aittime = : pass=0
=
 waittime : server/mpm_common.c line=195 column=16
w
aittime * : pass=0
*
 4;
232        if : true=0, false=0
i
f (waittime : server/mpm_common.c line=195 column=16
w
aittime > : true=0, false=0
>
 apr_time_from_sec(1)) {
233            waittime : server/mpm_common.c line=195 column=16
w
aittime = : pass=0
=
 apr_time_from_sec(1);
234        }
235
236        /* see what action to take, if any */
237        if : true=0, false=0
i
f (action_table : server/mpm_common.c line=207 column=7
a
ction_table[] : enter=0, leave=0
[
next_action : server/mpm_common.c line=221 column=9
n
ext_action].action_time : server/mpm_common.c line=206 column=20
a
ction_time <= : true=0, false=0
<
apr_time_now : enter=0, leave=0

apr_time_now : /usr/include/apr-1/apr_time.h line=85 column=25
a
pr_time_now() - : pass=0
-
 starttime : server/mpm_common.c line=200 column=16
s
tarttime) {
238            cur_action : server/mpm_common.c line=218 column=9
c
ur_action = : pass=0
=
 next_action : server/mpm_common.c line=221 column=9
n
ext_action;
239            ++ : pass=0
+
+next_action : server/mpm_common.c line=221 column=9
n
ext_action;
240        }
241        else {
242            cur_action : server/mpm_common.c line=218 column=9
c
ur_action = : pass=0
=
 0; /* nothing to do */
243        }
244
245        /* now see who is done */
246        not_dead_yet : server/mpm_common.c line=198 column=9
n
ot_dead_yet = : pass=0
=
 0;
247        for : true=0, false=0
f
or (i : server/mpm_common.c line=196 column=9
i
 = : pass=0
=
 0; i : server/mpm_common.c line=196 column=9
i
 < : true=0, false=0
<
 max_daemons : server/mpm_common.c line=199 column=9
m
ax_daemons; ++ : pass=0
+
+i : server/mpm_common.c line=196 column=9
i
) {
248            pid_t pid = MPM_CHILD_PID(i : server/mpm_common.c line=196 column=9
i
);
249
250            if : true=0, false=0
i
f (pid : server/mpm_common.c line=248 column=19
p
id == : true=0, false=0
=
= 0) {
251                continue : pass=0
c
ontinue; /* not every scoreboard entry is in use */
252            }
253
254            if : true=0, false=0
i
f (reclaim_one_pid : enter=0, leave=0

reclaim_one_pid : server/mpm_common.c line=124 column=12
r
eclaim_one_pid(pid : server/mpm_common.c line=248 column=19
p
id, action_table : server/mpm_common.c line=207 column=7
a
ction_table[] : enter=0, leave=0
[
cur_action : server/mpm_common.c line=218 column=9
c
ur_action].action : server/mpm_common.c line=205 column=18
a
ction)) {
255                MPM_NOTE_CHILD_KILLED(i : server/mpm_common.c line=196 column=9
i
);
256            }
257            else {
258                ++ : pass=0
+
+not_dead_yet : server/mpm_common.c line=198 column=9
n
ot_dead_yet;
259            }
260        }
261
262        cur_extra : server/mpm_common.c line=197 column=22
c
ur_extra = : pass=0
=
 extras : server/mpm_common.c line=87 column=25
e
xtras;
263        while : true=0, false=0
w
hile (cur_extra : server/mpm_common.c line=197 column=22
c
ur_extra) {
264            extra_process_t *next = cur_extra : server/mpm_common.c line=197 column=22
c
ur_extra-> : enter=0, leave=0
-
>next : server/mpm_common.c line=83 column=29
n
ext;
265
266            if : true=0, false=0
i
f (reclaim_one_pid : enter=0, leave=0

reclaim_one_pid : server/mpm_common.c line=124 column=12
r
eclaim_one_pid(cur_extra : server/mpm_common.c line=197 column=22
c
ur_extra-> : enter=0, leave=0
-
>pid : server/mpm_common.c line=84 column=11
p
id, action_table : server/mpm_common.c line=207 column=7
a
ction_table[] : enter=0, leave=0
[
cur_action : server/mpm_common.c line=218 column=9
c
ur_action].action : server/mpm_common.c line=205 column=18
a
ction)) {
267                AP_DEBUG_ASSERT(1 == ap_unregister_extra_mpm_process(cur_extra->pid));
268            }
269            else {
270                ++ : pass=0
+
+not_dead_yet : server/mpm_common.c line=198 column=9
n
ot_dead_yet;
271            }
272            cur_extra : server/mpm_common.c line=197 column=22
c
ur_extra = : pass=0
=
 next : server/mpm_common.c line=264 column=30
n
ext;
273        }
274#if APR_HAS_OTHER_CHILD
275        apr_proc_other_child_refresh_all : enter=0, leave=0

apr_proc_other_child_refresh_all : /usr/include/apr-1/apr_thread_proc.h line=763 column=19
a
pr_proc_other_child_refresh_all(APR_OC_REASON_RESTART);
276#endif
277
278    } while : true=0, false=0
w
hile (not_dead_yet : server/mpm_common.c line=198 column=9
n
ot_dead_yet > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 0 && : true=0, false=0
&
&
279             action_table : server/mpm_common.c line=207 column=7
a
ction_table[] : enter=0, leave=0
[
cur_action : server/mpm_common.c line=218 column=9
c
ur_action].action : server/mpm_common.c line=205 column=18
a
ction != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
GIVEUP : server/mpm_common.c line=80 column=55
G
IVEUP);
280}
281
282void ap_relieve_child_processes : call=0
a
p_relieve_child_processes(void)
283{
284    int i;
285    extra_process_t *cur_extra;
286    int max_daemons;
287
288    ap_mpm_query : enter=0, leave=0

ap_mpm_query : include/ap_mpm.h line=161 column=26
a
p_mpm_query(AP_MPMQ_MAX_DAEMON_USED, &max_daemons : server/mpm_common.c line=286 column=9
m
ax_daemons);
289
290    /* now see who is done */
291    for : true=0, false=0
f
or (i : server/mpm_common.c line=284 column=9
i
 = : pass=0
=
 0; i : server/mpm_common.c line=284 column=9
i
 < : true=0, false=0
<
 max_daemons : server/mpm_common.c line=286 column=9
m
ax_daemons; ++ : pass=0
+
+i : server/mpm_common.c line=284 column=9
i
) {
292        pid_t pid = MPM_CHILD_PID(i : server/mpm_common.c line=284 column=9
i
);
293
294        if : true=0, false=0
i
f (pid : server/mpm_common.c line=292 column=15
p
id == : true=0, false=0
=
= 0) {
295            continue : pass=0
c
ontinue; /* not every scoreboard entry is in use */
296        }
297
298        if : true=0, false=0
i
f (reclaim_one_pid : enter=0, leave=0

reclaim_one_pid : server/mpm_common.c line=124 column=12
r
eclaim_one_pid(pid : server/mpm_common.c line=292 column=15
p
id, DO_NOTHING : server/mpm_common.c line=80 column=15
D
O_NOTHING)) {
299            MPM_NOTE_CHILD_KILLED(i : server/mpm_common.c line=284 column=9
i
);
300        }
301    }
302
303    cur_extra : server/mpm_common.c line=285 column=22
c
ur_extra = : pass=0
=
 extras : server/mpm_common.c line=87 column=25
e
xtras;
304    while : true=0, false=0
w
hile (cur_extra : server/mpm_common.c line=285 column=22
c
ur_extra) {
305        extra_process_t *next = cur_extra : server/mpm_common.c line=285 column=22
c
ur_extra-> : enter=0, leave=0
-
>next : server/mpm_common.c line=83 column=29
n
ext;
306
307        if : true=0, false=0
i
f (reclaim_one_pid : enter=0, leave=0

reclaim_one_pid : server/mpm_common.c line=124 column=12
r
eclaim_one_pid(cur_extra : server/mpm_common.c line=285 column=22
c
ur_extra-> : enter=0, leave=0
-
>pid : server/mpm_common.c line=84 column=11
p
id, DO_NOTHING : server/mpm_common.c line=80 column=15
D
O_NOTHING)) {
308            AP_DEBUG_ASSERT(1 == ap_unregister_extra_mpm_process(cur_extra->pid));
309        }
310        cur_extra : server/mpm_common.c line=285 column=22
c
ur_extra = : pass=0
=
 next : server/mpm_common.c line=305 column=26
n
ext;
311    }
312}
313
314/* Before sending the signal to the pid this function verifies that
315 * the pid is a member of the current process group; either using
316 * apr_proc_wait(), where waitpid() guarantees to fail for non-child
317 * processes; or by using getpgid() directly, if available. */
318apr_status_t ap_mpm_safe_kill : call=0
a
p_mpm_safe_kill(pid_t pid, int sig)
319{
320#ifndef HAVE_GETPGID
321    apr_proc_t proc;
322    apr_status_t rv;
323    apr_exit_why_e why;
324    int status;
325
326    /* Ensure pid sanity */
327    if (pid < 1) {
328        return APR_EINVAL;
329    }
330
331    proc.pid = pid;
332    rv = apr_proc_wait(&proc, &status, &why, APR_NOWAIT);
333    if (rv == APR_CHILD_DONE) {
334#ifdef AP_MPM_WANT_PROCESS_CHILD_STATUS
335        /* The child already died - log the termination status if
336         * necessary: */
337        ap_process_child_status(&proc, why, status);
338#endif
339        return APR_EINVAL;
340    }
341    else if (rv != APR_CHILD_NOTDONE) {
342        /* The child is already dead and reaped, or was a bogus pid -
343         * log this either way. */
344        ap_log_error(APLOG_MARK, APLOG_NOTICE, rv, ap_server_conf,
345                     "cannot send signal %d to pid %ld (non-child or "
346                     "already dead)", sig, (long)pid);
347        return APR_EINVAL;
348    }
349#else
350    pid_t pg;
351
352    /* Ensure pid sanity. */
353    if : true=0, false=0
i
f (pid : server/mpm_common.c line=318 column=37
p
id < : true=0, false=0
<
 1) {
354        return : pass=0
r
eturn APR_EINVAL;
355    }
356
357    pg : server/mpm_common.c line=350 column=11
p
= : pass=0
=
 getpgid : enter=0, leave=0

getpgid : /usr/include/unistd.h line=645 column=16
g
etpgid(pid : server/mpm_common.c line=318 column=37
p
id);    
358    if : true=0, false=0
i
f (pg : server/mpm_common.c line=350 column=11
p
== : true=0, false=0
=
= -1) {
359        /* Process already dead... */
360        return : pass=0
r
eturn errno;
361    }
362
363    if : true=0, false=0
i
f (pg : server/mpm_common.c line=350 column=11
p
!= : true=0, false=0
!
getpgrp : enter=0, leave=0

getpgrp : /usr/include/unistd.h line=633 column=16
g
etpgrp()) {
364        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_ALERT, 0, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
365                     "refusing to send signal %d to pid %ld outside "
366                     "process group", sig : server/mpm_common.c line=318 column=46
s
ig, (long)pid : server/mpm_common.c line=318 column=37
p
id);
367        return : pass=0
r
eturn APR_EINVAL;
368    }
369#endif        
370
371    return : pass=0
r
eturn kill : enter=0, leave=0

kill : /usr/include/signal.h line=126 column=12
k
ill(pid : server/mpm_common.c line=318 column=37
p
id, sig : server/mpm_common.c line=318 column=46
s
ig) conditional operator : true=0, false=0
?
 errno : APR_SUCCESS;
372}
373#endif /* AP_MPM_WANT_RECLAIM_CHILD_PROCESSES */
374
375#ifdef AP_MPM_WANT_WAIT_OR_TIMEOUT
376
377/* number of calls to wait_or_timeout between writable probes */
378#ifndef INTERVAL_OF_WRITABLE_PROBES
379#define INTERVAL_OF_WRITABLE_PROBES 10
380#endif
381static int wait_or_timeout_counter;
382
383void ap_wait_or_timeout : call=0
a
p_wait_or_timeout(apr_exit_why_e *status, int *exitcode, apr_proc_t *ret,
384                        apr_pool_t *p)
385{
386    apr_status_t rv;
387
388    ++ : pass=0
+
+wait_or_timeout_counter : server/mpm_common.c line=381 column=12
w
ait_or_timeout_counter;
389    if : true=0, false=0
i
f (wait_or_timeout_counter : server/mpm_common.c line=381 column=12
w
ait_or_timeout_counter == : true=0, false=0
=
= INTERVAL_OF_WRITABLE_PROBES) {
390        wait_or_timeout_counter : server/mpm_common.c line=381 column=12
w
ait_or_timeout_counter = : pass=0
=
 0;
391        ap_run_monitor : enter=0, leave=0

ap_run_monitor : server/ line=215 column=1
a
p_run_monitor(p : server/mpm_common.c line=384 column=37
p
);
392    }
393
394    rv : server/mpm_common.c line=386 column=18
r
= : pass=0
=
 apr_proc_wait_all_procs : enter=0, leave=0

apr_proc_wait_all_procs : /usr/include/apr-1/apr_thread_proc.h line=671 column=27
a
pr_proc_wait_all_procs(ret : server/mpm_common.c line=383 column=76
r
et, exitcode : server/mpm_common.c line=383 column=54
e
xitcode, status : server/mpm_common.c line=383 column=41
s
tatus, APR_NOWAIT : /usr/include/apr-1/apr_thread_proc.h line=57 column=5 APR_NOWAIT, p : server/mpm_common.c line=384 column=37
p
);
395    if : true=0, false=0
i
f (APR_STATUS_IS_EINTR(rv : server/mpm_common.c line=386 column=18
r
v)) {
396        ret : server/mpm_common.c line=383 column=76
r
et-> : enter=0, leave=0
-
>pid : /usr/include/apr-1/apr_thread_proc.h line=135 column=11 pid = : enter=0, leave=0
=
 -1;
397        return : pass=0
r
eturn;
398    }
399
400    if : true=0, false=0
i
f (APR_STATUS_IS_CHILD_DONE(rv : server/mpm_common.c line=386 column=18
r
v)) {
401        return : pass=0
r
eturn;
402    }
403
404#ifdef NEED_WAITPID
405    if ((ret = reap_children(exitcode, status)) > 0) {
406        return;
407    }
408#endif
409
410    apr_sleep : enter=0, leave=0

apr_sleep : /usr/include/apr-1/apr_time.h line=178 column=19
a
pr_sleep(SCOREBOARD_MAINTENANCE_INTERVAL);
411    ret : server/mpm_common.c line=383 column=76
r
et-> : enter=0, leave=0
-
>pid : /usr/include/apr-1/apr_thread_proc.h line=135 column=11 pid = : enter=0, leave=0
=
 -1;
412    return : pass=0
r
eturn;
413}
414#endif /* AP_MPM_WANT_WAIT_OR_TIMEOUT */
415
416#ifdef AP_MPM_WANT_PROCESS_CHILD_STATUS
417int ap_process_child_status : call=0
a
p_process_child_status(apr_proc_t *pid, apr_exit_why_e why, int status)
418{
419    int signum = status : server/mpm_common.c line=417 column=70
s
tatus;
420    const char *sigdesc = apr_signal_description_get : enter=0, leave=0

apr_signal_description_get : /usr/include/apr-1/apr_signal.h line=80 column=27
a
pr_signal_description_get(signum : server/mpm_common.c line=419 column=9
s
ignum);
421
422    /* Child died... if it died due to a fatal error,
423     * we should simply bail out.  The caller needs to
424     * check for bad rc from us and exit, running any
425     * appropriate cleanups.
426     *
427     * If the child died due to a resource shortage,
428     * the parent should limit the rate of forking
429     */
430    if : true=0, false=0
i
f (APR_PROC_CHECK_EXIT(why : server/mpm_common.c line=417 column=61
w
hy)) {
431        if : true=0, false=0
i
f (status : server/mpm_common.c line=417 column=70
s
tatus == : true=0, false=0
=
= APEXIT_CHILDSICK) {
432            return : pass=0
r
eturn status : server/mpm_common.c line=417 column=70
s
tatus;
433        }
434
435        if : true=0, false=0
i
f (status : server/mpm_common.c line=417 column=70
s
tatus == : true=0, false=0
=
= APEXIT_CHILDFATAL) {
436            ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_ALERT,
437                         0, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
438                         "Child %" APR_PID_T_FMT
439                         " returned a Fatal error... Apache is exiting!",
440                         pid : server/mpm_common.c line=417 column=41
p
id-> : enter=0, leave=0
-
>pid : /usr/include/apr-1/apr_thread_proc.h line=135 column=11 pid);
441            return : pass=0
r
eturn APEXIT_CHILDFATAL;
442        }
443
444        return : pass=0
r
eturn 0;
445    }
446
447    if : true=0, false=0
i
f (APR_PROC_CHECK_SIGNALED(why : server/mpm_common.c line=417 column=61
w
hy)) {
448        switch : pass=0
s
witch (signum : server/mpm_common.c line=419 column=9
s
ignum) {
449        case : true=0, false=0
c
ase SIGTERM:
450        case : true=0, false=0
c
ase SIGHUP:
451        case : true=0, false=0
c
ase AP_SIG_GRACEFUL:
452        case : true=0, false=0
c
ase SIGKILL:
453            break : pass=0
b
reak;
454
455        default : true=0, false=0
d
efault:
456            if : true=0, false=0
i
f (APR_PROC_CHECK_CORE_DUMP(why : server/mpm_common.c line=417 column=61
w
hy)) {
457                ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_NOTICE,
458                             0, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
459                             "child pid %ld exit signal %s (%d), "
460                             "possible coredump in %s",
461                             (long)pid : server/mpm_common.c line=417 column=41
p
id-> : enter=0, leave=0
-
>pid : /usr/include/apr-1/apr_thread_proc.h line=135 column=11 pid, sigdesc : server/mpm_common.c line=420 column=17
s
igdesc, signum : server/mpm_common.c line=419 column=9
s
ignum,
462                             ap_coredump_dir : include/mpm_common.h line=332 column=13
a
p_coredump_dir);
463            }
464            else {
465                ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_NOTICE,
466                             0, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
467                             "child pid %ld exit signal %s (%d)",
468                             (long)pid : server/mpm_common.c line=417 column=41
p
id-> : enter=0, leave=0
-
>pid : /usr/include/apr-1/apr_thread_proc.h line=135 column=11 pid, sigdesc : server/mpm_common.c line=420 column=17
s
igdesc, signum : server/mpm_common.c line=419 column=9
s
ignum);
469            }
470        }
471    }
472    return : pass=0
r
eturn 0;
473}
474#endif /* AP_MPM_WANT_PROCESS_CHILD_STATUS */
475
476#if defined(TCP_NODELAY) && !defined(MPE) && !defined(TPF)
477void ap_sock_disable_nagle : call=0
a
p_sock_disable_nagle(apr_socket_t *s)
478{
479    /* The Nagle algorithm says that we should delay sending partial
480     * packets in hopes of getting more data.  We don't want to do
481     * this; we are not telnet.  There are bad interactions between
482     * persistent connections and Nagle's algorithm that have very severe
483     * performance penalties.  (Failing to disable Nagle is not much of a
484     * problem with simple HTTP.)
485     *
486     * In spite of these problems, failure here is not a shooting offense.
487     */
488    apr_status_t status = apr_socket_opt_set : enter=0, leave=0

apr_socket_opt_set : /usr/include/apr-1/apr_network_io.h line=600 column=27
a
pr_socket_opt_set(s : server/mpm_common.c line=477 column=42
s
, APR_TCP_NODELAY, 1);
489
490    if : true=0, false=0
i
f (status : server/mpm_common.c line=488 column=18
s
tatus != : true=0, false=0
!
= APR_SUCCESS) {
491        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_WARNING, status : server/mpm_common.c line=488 column=18
s
tatus, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
492                     "apr_socket_opt_set: (TCP_NODELAY)");
493    }
494}
495#endif
496
497#ifdef HAVE_GETPWNAM
498AP_DECLARE(uid_t) ap_uname2id : call=0
a
p_uname2id(const char *name)
499{
500    struct passwd *ent;
501
502    if : true=0, false=0
i
f (name : server/mpm_common.c line=498 column=43
n
ame[] : enter=0, leave=0
[
0] == : true=0, false=0
=
= '#')
503        return : pass=0
r
eturn (atoi : enter=0, leave=0

atoi : /usr/include/stdlib.h line=148 column=12
a
toi(&name : server/mpm_common.c line=498 column=43
n
ame[] : enter=0, leave=0
[
1]));
504
505    if : true=0, false=0
i
f (! : true=0, false=0
!
(ent : server/mpm_common.c line=500 column=20
e
nt = : pass=0
=
 getpwnam : enter=0, leave=0

getpwnam : /usr/include/pwd.h line=117 column=23
g
etpwnam(name : server/mpm_common.c line=498 column=43
n
ame))) {
506        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
507                     "%s: bad user name %s", ap_server_argv0 : include/http_main.h line=42 column=36 ap_server_argv0, name : server/mpm_common.c line=498 column=43
n
ame);
508        exit : enter=0, leave=0

exit : /usr/include/stdlib.h line=544 column=13
e
xit(1);
509    }
510
511    return : pass=0
r
eturn (ent : server/mpm_common.c line=500 column=20
e
nt-> : enter=0, leave=0
-
>pw_uid : /usr/include/pwd.h line=54 column=11 pw_uid);
512}
513#endif
514
515#ifdef HAVE_GETGRNAM
516AP_DECLARE(gid_t) ap_gname2id : call=0
a
p_gname2id(const char *name)
517{
518    struct group *ent;
519
520    if : true=0, false=0
i
f (name : server/mpm_common.c line=516 column=43
n
ame[] : enter=0, leave=0
[
0] == : true=0, false=0
=
= '#')
521        return : pass=0
r
eturn (atoi : enter=0, leave=0

atoi : /usr/include/stdlib.h line=148 column=12
a
toi(&name : server/mpm_common.c line=516 column=43
n
ame[] : enter=0, leave=0
[
1]));
522
523    if : true=0, false=0
i
f (! : true=0, false=0
!
(ent : server/mpm_common.c line=518 column=19
e
nt = : pass=0
=
 getgrnam : enter=0, leave=0

getgrnam : /usr/include/grp.h line=113 column=22
g
etgrnam(name : server/mpm_common.c line=516 column=43
n
ame))) {
524        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
525                     "%s: bad group name %s", ap_server_argv0 : include/http_main.h line=42 column=36 ap_server_argv0, name : server/mpm_common.c line=516 column=43
n
ame);
526        exit : enter=0, leave=0

exit : /usr/include/stdlib.h line=544 column=13
e
xit(1);
527    }
528
529    return : pass=0
r
eturn (ent : server/mpm_common.c line=518 column=19
e
nt-> : enter=0, leave=0
-
>gr_gid : /usr/include/grp.h line=48 column=13 gr_gid);
530}
531#endif
532
533#ifndef HAVE_INITGROUPS
534int initgroups(const char *name, gid_t basegid)
535{
536#if defined(QNX) || defined(MPE) || defined(BEOS) || defined(_OSD_POSIX) || defined(TPF) || defined(__TANDEM) || defined(OS2) || defined(WIN32) || defined(NETWARE)
537/* QNX, MPE and BeOS do not appear to support supplementary groups. */
538    return 0;
539#else /* ndef QNX */
540    gid_t groups[NGROUPS_MAX];
541    struct group *g;
542    int index = 0;
543
544    setgrent();
545
546    groups[index++] = basegid;
547
548    while (index < NGROUPS_MAX && ((g = getgrent()) != NULL)) {
549        if (g->gr_gid != basegid) {
550            char **names;
551
552            for (names = g->gr_mem; *names != NULL; ++names) {
553                if (!strcmp(*names, name))
554                    groups[index++] = g->gr_gid;
555            }
556        }
557    }
558
559    endgrent();
560
561    return setgroups(index, groups);
562#endif /* def QNX */
563}
564#endif /* def HAVE_INITGROUPS */
565
566#ifdef AP_MPM_USES_POD
567
568AP_DECLARE(apr_status_t) ap_mpm_pod_open : call=0
a
p_mpm_pod_open(apr_pool_t *p, ap_pod_t **pod)
569{
570    apr_status_t rv;
571
572    *pod : server/mpm_common.c line=568 column=68
p
od = : enter=0, leave=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/mpm_common.c line=568 column=54
p
, sizeof(**pod));
573    rv : server/mpm_common.c line=570 column=18
r
= : pass=0
=
 apr_file_pipe_create : enter=0, leave=0

apr_file_pipe_create : /usr/include/apr-1/apr_file_io.h line=647 column=27
a
pr_file_pipe_create(&((* dereference : enter=0, leave=0
*
pod : server/mpm_common.c line=568 column=68
p
od)-> : enter=0, leave=0
-
>pod_in : include/mpm_common.h line=237 column=17
p
od_in), &((* dereference : enter=0, leave=0
*
pod : server/mpm_common.c line=568 column=68
p
od)-> : enter=0, leave=0
-
>pod_out : include/mpm_common.h line=238 column=17
p
od_out), p : server/mpm_common.c line=568 column=54
p
);
574    if : true=0, false=0
i
f (rv : server/mpm_common.c line=570 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
575        return : pass=0
r
eturn rv : server/mpm_common.c line=570 column=18
r
v;
576    }
577
578    apr_file_pipe_timeout_set : enter=0, leave=0

apr_file_pipe_timeout_set : /usr/include/apr-1/apr_file_io.h line=700 column=27
a
pr_file_pipe_timeout_set((* dereference : enter=0, leave=0
*
pod : server/mpm_common.c line=568 column=68
p
od)-> : enter=0, leave=0
-
>pod_in : include/mpm_common.h line=237 column=17
p
od_in, 0);
579    (* dereference : enter=0, leave=0
*
pod : server/mpm_common.c line=568 column=68
p
od)-> : enter=0, leave=0
-
>p : include/mpm_common.h line=239 column=17
p
 = : enter=0, leave=0
=
 p : server/mpm_common.c line=568 column=54
p
;
580
581    /* close these before exec. */
582    apr_file_inherit_unset : enter=0, leave=0

apr_file_inherit_unset : server/ line=98 column=1
a
pr_file_inherit_unset((* dereference : enter=0, leave=0
*
pod : server/mpm_common.c line=568 column=68
p
od)-> : enter=0, leave=0
-
>pod_in : include/mpm_common.h line=237 column=17
p
od_in);
583    apr_file_inherit_unset : enter=0, leave=0

apr_file_inherit_unset : server/ line=98 column=1
a
pr_file_inherit_unset((* dereference : enter=0, leave=0
*
pod : server/mpm_common.c line=568 column=68
p
od)-> : enter=0, leave=0
-
>pod_out : include/mpm_common.h line=238 column=17
p
od_out);
584
585    return : pass=0
r
eturn APR_SUCCESS;
586}
587
588AP_DECLARE(apr_status_t) ap_mpm_pod_check : call=0
a
p_mpm_pod_check(ap_pod_t *pod)
589{
590    char c;
591    apr_size_t len = 1;
592    apr_status_t rv;
593
594    rv : server/mpm_common.c line=592 column=18
r
= : pass=0
=
 apr_file_read : enter=0, leave=0

apr_file_read : /usr/include/apr-1/apr_file_io.h line=407 column=27
a
pr_file_read(pod : server/mpm_common.c line=588 column=53
p
od-> : enter=0, leave=0
-
>pod_in : include/mpm_common.h line=237 column=17
p
od_in, &c : server/mpm_common.c line=590 column=10
c
, &len : server/mpm_common.c line=591 column=16
l
en);
595
596    if : true=0, false=0
i
f ((rv : server/mpm_common.c line=592 column=18
r
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= APR_SUCCESS) && : true=0, false=0
&
& (len : server/mpm_common.c line=591 column=16
l
en == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 1)) {
597        return : pass=0
r
eturn APR_SUCCESS;
598    }
599
600    if : true=0, false=0
i
f (rv : server/mpm_common.c line=592 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
601        return : pass=0
r
eturn rv : server/mpm_common.c line=592 column=18
r
v;
602    }
603
604    return : pass=0
r
eturn AP_NORESTART;
605}
606
607AP_DECLARE(apr_status_t) ap_mpm_pod_close : call=0
a
p_mpm_pod_close(ap_pod_t *pod)
608{
609    apr_status_t rv;
610
611    rv : server/mpm_common.c line=609 column=18
r
= : pass=0
=
 apr_file_close : enter=0, leave=0

apr_file_close : /usr/include/apr-1/apr_file_io.h line=243 column=27
a
pr_file_close(pod : server/mpm_common.c line=607 column=53
p
od-> : enter=0, leave=0
-
>pod_out : include/mpm_common.h line=238 column=17
p
od_out);
612    if : true=0, false=0
i
f (rv : server/mpm_common.c line=609 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
613        return : pass=0
r
eturn rv : server/mpm_common.c line=609 column=18
r
v;
614    }
615
616    rv : server/mpm_common.c line=609 column=18
r
= : pass=0
=
 apr_file_close : enter=0, leave=0

apr_file_close : /usr/include/apr-1/apr_file_io.h line=243 column=27
a
pr_file_close(pod : server/mpm_common.c line=607 column=53
p
od-> : enter=0, leave=0
-
>pod_in : include/mpm_common.h line=237 column=17
p
od_in);
617    if : true=0, false=0
i
f (rv : server/mpm_common.c line=609 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
618        return : pass=0
r
eturn rv : server/mpm_common.c line=609 column=18
r
v;
619    }
620
621    return : pass=0
r
eturn APR_SUCCESS;
622}
623
624static apr_status_t pod_signal_internal : call=0
p
od_signal_internal(ap_pod_t *pod)
625{
626    apr_status_t rv;
627    char char_of_death = '!';
628    apr_size_t one = 1;
629
630    rv : server/mpm_common.c line=626 column=18
r
= : pass=0
=
 apr_file_write : enter=0, leave=0

apr_file_write : /usr/include/apr-1/apr_file_io.h line=425 column=27
a
pr_file_write(pod : server/mpm_common.c line=624 column=51
p
od-> : enter=0, leave=0
-
>pod_out : include/mpm_common.h line=238 column=17
p
od_out, &char_of_death : server/mpm_common.c line=627 column=10
c
har_of_death, &one : server/mpm_common.c line=628 column=16
o
ne);
631    if : true=0, false=0
i
f (rv : server/mpm_common.c line=626 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
632        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_WARNING, rv : server/mpm_common.c line=626 column=18
r
v, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
633                     "write pipe_of_death");
634    }
635
636    return : pass=0
r
eturn rv : server/mpm_common.c line=626 column=18
r
v;
637}
638
639/* This function connects to the server and sends enough data to
640 * ensure the child wakes up and processes a new connection.  This
641 * permits the MPM to skip the poll when there is only one listening
642 * socket, because it provides a alternate way to unblock an accept()
643 * when the pod is used.  */
644static apr_status_t dummy_connection : call=0
d
ummy_connection(ap_pod_t *pod)
645{
646    const char *data;
647    apr_status_t rv;
648    apr_socket_t *sock;
649    apr_pool_t *p;
650    apr_size_t len;
651
652    /* create a temporary pool for the socket.  pconf stays around too long */
653    rv : server/mpm_common.c line=647 column=18
r
= : pass=0
=
 apr_pool_create(&p : server/mpm_common.c line=649 column=17
p
pod : server/mpm_common.c line=644 column=48
p
od-> : enter=0, leave=0
-
>p : include/mpm_common.h line=239 column=17
p
);
654    if : true=0, false=0
i
f (rv : server/mpm_common.c line=647 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
655        return : pass=0
r
eturn rv : server/mpm_common.c line=647 column=18
r
v;
656    }
657
658    rv : server/mpm_common.c line=647 column=18
r
= : pass=0
=
 apr_socket_create : enter=0, leave=0

apr_socket_create : /usr/include/apr-1/apr_network_io.h line=282 column=27
a
pr_socket_create(&sock : server/mpm_common.c line=648 column=19
s
ock, ap_listeners : include/ap_listen.h line=76 column=39
a
p_listeners-> : enter=0, leave=0
-
>bind_addr : include/ap_listen.h line=58 column=21
b
ind_addr-> : enter=0, leave=0
-
>family : /usr/include/apr-1/apr_network_io.h line=221 column=17 family,
659                           SOCK_STREAM, 0, p : server/mpm_common.c line=649 column=17
p
);
660    if : true=0, false=0
i
f (rv : server/mpm_common.c line=647 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
661        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_WARNING, rv : server/mpm_common.c line=647 column=18
r
v, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
662                     "get socket to connect to listener");
663        apr_pool_destroy : enter=0, leave=0

apr_pool_destroy : /usr/include/apr-1/apr_pools.h line=385 column=19
a
pr_pool_destroy(p : server/mpm_common.c line=649 column=17
p
);
664        return : pass=0
r
eturn rv : server/mpm_common.c line=647 column=18
r
v;
665    }
666
667    /* on some platforms (e.g., FreeBSD), the kernel won't accept many
668     * queued connections before it starts blocking local connects...
669     * we need to keep from blocking too long and instead return an error,
670     * because the MPM won't want to hold up a graceful restart for a
671     * long time
672     */
673    rv : server/mpm_common.c line=647 column=18
r
= : pass=0
=
 apr_socket_timeout_set : enter=0, leave=0

apr_socket_timeout_set : /usr/include/apr-1/apr_network_io.h line=614 column=27
a
pr_socket_timeout_set(sock : server/mpm_common.c line=648 column=19
s
ock, apr_time_from_sec(3));
674    if : true=0, false=0
i
f (rv : server/mpm_common.c line=647 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
675        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_WARNING, rv : server/mpm_common.c line=647 column=18
r
v, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
676                     "set timeout on socket to connect to listener");
677        apr_socket_close : enter=0, leave=0

apr_socket_close : /usr/include/apr-1/apr_network_io.h line=307 column=27
a
pr_socket_close(sock : server/mpm_common.c line=648 column=19
s
ock);
678        apr_pool_destroy : enter=0, leave=0

apr_pool_destroy : /usr/include/apr-1/apr_pools.h line=385 column=19
a
pr_pool_destroy(p : server/mpm_common.c line=649 column=17
p
);
679        return : pass=0
r
eturn rv : server/mpm_common.c line=647 column=18
r
v;
680    }
681
682    rv : server/mpm_common.c line=647 column=18
r
= : pass=0
=
 apr_socket_connect : enter=0, leave=0

apr_socket_connect : /usr/include/apr-1/apr_network_io.h line=347 column=27
a
pr_socket_connect(sock : server/mpm_common.c line=648 column=19
s
ock, ap_listeners : include/ap_listen.h line=76 column=39
a
p_listeners-> : enter=0, leave=0
-
>bind_addr : include/ap_listen.h line=58 column=21
b
ind_addr);
683    if : true=0, false=0
i
f (rv : server/mpm_common.c line=647 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
684        int log_level = APLOG_WARNING;
685
686        if : true=0, false=0
i
f (APR_STATUS_IS_TIMEUP(rv : server/mpm_common.c line=647 column=18
r
v)) {
687            /* probably some server processes bailed out already and there
688             * is nobody around to call accept and clear out the kernel
689             * connection queue; usually this is not worth logging
690             */
691            log_level : server/mpm_common.c line=684 column=13
l
og_level = : pass=0
=
 APLOG_DEBUG;
692        }
693
694        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, log_level : server/mpm_common.c line=684 column=13
l
og_level, rv : server/mpm_common.c line=647 column=18
r
v, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
695                     "connect to listener on %pI", ap_listeners : include/ap_listen.h line=76 column=39
a
p_listeners-> : enter=0, leave=0
-
>bind_addr : include/ap_listen.h line=58 column=21
b
ind_addr);
696        apr_pool_destroy : enter=0, leave=0

apr_pool_destroy : /usr/include/apr-1/apr_pools.h line=385 column=19
a
pr_pool_destroy(p : server/mpm_common.c line=649 column=17
p
);
697        return : pass=0
r
eturn rv : server/mpm_common.c line=647 column=18
r
v;
698    }
699
700    if : true=0, false=0
i
f (ap_listeners : include/ap_listen.h line=76 column=39
a
p_listenersMC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>protocol : include/ap_listen.h line=70 column=17
p
rotocol && : true=0, false=0
&
strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(ap_listeners : include/ap_listen.h line=76 column=39
a
p_listeners-> : enter=0, leave=0
-
>protocol : include/ap_listen.h line=70 column=17
p
rotocol, "https") == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 0) {
701        /* Send a TLS 1.0 close_notify alert.  This is perhaps the
702         * "least wrong" way to open and cleanly terminate an SSL
703         * connection.  It should "work" without noisy error logs if
704         * the server actually expects SSLv3/TLSv1.  With
705         * SSLv23_server_method() OpenSSL's SSL_accept() fails
706         * ungracefully on receipt of this message, since it requires
707         * an 11-byte ClientHello message and this is too short. */
708        static const unsigned char tls10_close_notify[7] = {
709            '\x15',         /* TLSPlainText.type = Alert (21) */
710            '\x03', '\x01', /* TLSPlainText.version = {3, 1} */
711            '\x00', '\x02', /* TLSPlainText.length = 2 */
712            '\x01',         /* Alert.level = warning (1) */
713            '\x00'          /* Alert.description = close_notify (0) */
714        };
715        data : server/mpm_common.c line=646 column=17
d
ata = : pass=0
=
 (const char *)tls10_close_notify : server/mpm_common.c line=708 column=36
t
ls10_close_notify;
716        len : server/mpm_common.c line=650 column=16
l
en = : pass=0
=
 sizeof(tls10_close_notify);
717    }
718    else /* ... XXX other request types here? */ {
719        /* Create an HTTP request string.  We include a User-Agent so
720         * that adminstrators can track down the cause of the
721         * odd-looking requests in their logs.  A complete request is
722         * used since kernel-level filtering may require that much
723         * data before returning from accept(). */
724        data : server/mpm_common.c line=646 column=17
d
ata = : pass=0
=
 apr_pstrcat : enter=0, leave=0

apr_pstrcat : /usr/include/apr-1/apr_strings.h line=139 column=28
a
pr_pstrcat(p : server/mpm_common.c line=649 column=17
p
, "OPTIONS * HTTP/1.0\r\nUser-Agent: ",
725                           ap_get_server_banner : enter=0, leave=0

ap_get_server_banner : include/httpd.h line=445 column=26
a
p_get_server_banner(),
726                           " (internal dummy connection)\r\n\r\n", NULL);
727        len : server/mpm_common.c line=650 column=16
l
en = : pass=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(data : server/mpm_common.c line=646 column=17
d
ata);
728    }
729
730    apr_socket_send : enter=0, leave=0

apr_socket_send : /usr/include/apr-1/apr_network_io.h line=473 column=27
a
pr_socket_send(sock : server/mpm_common.c line=648 column=19
s
ock, data : server/mpm_common.c line=646 column=17
d
ata, &len : server/mpm_common.c line=650 column=16
l
en);
731    apr_socket_close : enter=0, leave=0

apr_socket_close : /usr/include/apr-1/apr_network_io.h line=307 column=27
a
pr_socket_close(sock : server/mpm_common.c line=648 column=19
s
ock);
732    apr_pool_destroy : enter=0, leave=0

apr_pool_destroy : /usr/include/apr-1/apr_pools.h line=385 column=19
a
pr_pool_destroy(p : server/mpm_common.c line=649 column=17
p
);
733
734    return : pass=0
r
eturn rv : server/mpm_common.c line=647 column=18
r
v;
735}
736
737AP_DECLARE(apr_status_t) ap_mpm_pod_signal : call=0
a
p_mpm_pod_signal(ap_pod_t *pod)
738{
739    apr_status_t rv;
740
741    rv : server/mpm_common.c line=739 column=18
r
= : pass=0
=
 pod_signal_internal : enter=0, leave=0

pod_signal_internal : server/mpm_common.c line=624 column=21
p
od_signal_internal(pod : server/mpm_common.c line=737 column=54
p
od);
742    if : true=0, false=0
i
f (rv : server/mpm_common.c line=739 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
743        return : pass=0
r
eturn rv : server/mpm_common.c line=739 column=18
r
v;
744    }
745
746    return : pass=0
r
eturn dummy_connection : enter=0, leave=0

dummy_connection : server/mpm_common.c line=644 column=21
d
ummy_connection(pod : server/mpm_common.c line=737 column=54
p
od);
747}
748
749void ap_mpm_pod_killpg : call=0
a
p_mpm_pod_killpg(ap_pod_t *pod, int num)
750{
751    int i;
752    apr_status_t rv = APR_SUCCESS;
753
754    /* we don't write anything to the pod here...  we assume
755     * that the would-be reader of the pod has another way to
756     * see that it is time to die once we wake it up
757     *
758     * writing lots of things to the pod at once is very
759     * problematic... we can fill the kernel pipe buffer and
760     * be blocked until somebody consumes some bytes or
761     * we hit a timeout...  if we hit a timeout we can't just
762     * keep trying because maybe we'll never successfully
763     * write again...  but then maybe we'll leave would-be
764     * readers stranded (a number of them could be tied up for
765     * a while serving time-consuming requests)
766     */
767    for : true=0, false=0
f
or (i : server/mpm_common.c line=751 column=9
i
 = : pass=0
=
 0; i : server/mpm_common.c line=751 column=9
i
 < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 num : server/mpm_common.c line=749 column=43
n
um && : true=0, false=0
&
rv : server/mpm_common.c line=752 column=18
r
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= APR_SUCCESS; i : server/mpm_common.c line=751 column=9
i
++ : pass=0
+
+) {
768        rv : server/mpm_common.c line=752 column=18
r
= : pass=0
=
 dummy_connection : enter=0, leave=0

dummy_connection : server/mpm_common.c line=644 column=21
d
ummy_connection(pod : server/mpm_common.c line=749 column=34
p
od);
769    }
770}
771#endif /* #ifdef AP_MPM_USES_POD */
772
773/* standard mpm configuration handling */
774#ifdef AP_MPM_WANT_SET_PIDFILE
775const char *ap_pid_fname = NULL;
776
777const char *ap_mpm_set_pidfile : call=0
a
p_mpm_set_pidfile(cmd_parms *cmd, void *dummy,
778                               const char *arg)
779{
780    const char *err = ap_check_cmd_context : enter=0, leave=0

ap_check_cmd_context : include/http_config.h line=710 column=26
a
p_check_cmd_context(cmd : server/mpm_common.c line=777 column=43
c
md, GLOBAL_ONLY);
781    if : true=0, false=0
i
f (err : server/mpm_common.c line=780 column=17
e
rr != : true=0, false=0
!
= NULL) {
782        return : pass=0
r
eturn err : server/mpm_common.c line=780 column=17
e
rr;
783    }
784
785    if : true=0, false=0
i
f (cmd : server/mpm_common.c line=777 column=43
c
md-> : enter=0, leave=0
-
>server : include/http_config.h line=296 column=17
s
erver-> : enter=0, leave=0
-
>is_virtual : include/httpd.h line=1204 column=9
i
s_virtual) {
786        return : pass=0
r
eturn "PidFile directive not allowed in <VirtualHost>";
787    }
788
789    ap_pid_fname : server/mpm_common.c line=775 column=13
a
p_pid_fname = : pass=0
=
 arg : server/mpm_common.c line=778 column=44
a
rg;
790    return : pass=0
r
eturn NULL;
791}
792#endif
793
794#ifdef AP_MPM_WANT_SET_SCOREBOARD
795const char * ap_mpm_set_scoreboard : call=0
a
p_mpm_set_scoreboard(cmd_parms *cmd, void *dummy,
796                                   const char *arg)
797{
798    const char *err = ap_check_cmd_context : enter=0, leave=0

ap_check_cmd_context : include/http_config.h line=710 column=26
a
p_check_cmd_context(cmd : server/mpm_common.c line=795 column=47
c
md, GLOBAL_ONLY);
799    if : true=0, false=0
i
f (err : server/mpm_common.c line=798 column=17
e
rr != : true=0, false=0
!
= NULL) {
800        return : pass=0
r
eturn err : server/mpm_common.c line=798 column=17
e
rr;
801    }
802
803    ap_scoreboard_fname : include/scoreboard.h line=215 column=36 ap_scoreboard_fname = : pass=0
=
 arg : server/mpm_common.c line=796 column=48
a
rg;
804    return : pass=0
r
eturn NULL;
805}
806#endif
807
808#ifdef AP_MPM_WANT_SET_LOCKFILE
809const char *ap_lock_fname = NULL;
810
811const char *ap_mpm_set_lockfile : call=0
a
p_mpm_set_lockfile(cmd_parms *cmd, void *dummy,
812                                const char *arg)
813{
814    const char *err = ap_check_cmd_context : enter=0, leave=0

ap_check_cmd_context : include/http_config.h line=710 column=26
a
p_check_cmd_context(cmd : server/mpm_common.c line=811 column=44
c
md, GLOBAL_ONLY);
815    if : true=0, false=0
i
f (err : server/mpm_common.c line=814 column=17
e
rr != : true=0, false=0
!
= NULL) {
816        return : pass=0
r
eturn err : server/mpm_common.c line=814 column=17
e
rr;
817    }
818
819    ap_lock_fname : server/mpm_common.c line=809 column=13
a
p_lock_fname = : pass=0
=
 arg : server/mpm_common.c line=812 column=45
a
rg;
820    return : pass=0
r
eturn NULL;
821}
822#endif
823
824#ifdef AP_MPM_WANT_SET_MAX_REQUESTS
825int ap_max_requests_per_child = 0;
826
827const char *ap_mpm_set_max_requests : call=0
a
p_mpm_set_max_requests(cmd_parms *cmd, void *dummy,
828                                    const char *arg)
829{
830    const char *err = ap_check_cmd_context : enter=0, leave=0

ap_check_cmd_context : include/http_config.h line=710 column=26
a
p_check_cmd_context(cmd : server/mpm_common.c line=827 column=48
c
md, GLOBAL_ONLY);
831    if : true=0, false=0
i
f (err : server/mpm_common.c line=830 column=17
e
rr != : true=0, false=0
!
= NULL) {
832        return : pass=0
r
eturn err : server/mpm_common.c line=830 column=17
e
rr;
833    }
834
835    ap_max_requests_per_child : server/mpm_common.c line=825 column=5
a
p_max_requests_per_child = : pass=0
=
 atoi : enter=0, leave=0

atoi : /usr/include/stdlib.h line=148 column=12
a
toi(arg : server/mpm_common.c line=828 column=49
a
rg);
836
837    return : pass=0
r
eturn NULL;
838}
839#endif
840
841#ifdef AP_MPM_WANT_SET_COREDUMPDIR
842char ap_coredump_dir[MAX_STRING_LEN];
843int ap_coredumpdir_configured;
844
845const char *ap_mpm_set_coredumpdir : call=0
a
p_mpm_set_coredumpdir(cmd_parms *cmd, void *dummy,
846                                   const char *arg)
847{
848    apr_status_t rv;
849    apr_finfo_t finfo;
850    const char *fname;
851    const char *err = ap_check_cmd_context : enter=0, leave=0

ap_check_cmd_context : include/http_config.h line=710 column=26
a
p_check_cmd_context(cmd : server/mpm_common.c line=845 column=47
c
md, GLOBAL_ONLY);
852    if : true=0, false=0
i
f (err : server/mpm_common.c line=851 column=17
e
rr != : true=0, false=0
!
= NULL) {
853        return : pass=0
r
eturn err : server/mpm_common.c line=851 column=17
e
rr;
854    }
855
856    fname : server/mpm_common.c line=850 column=17
f
name = : pass=0
=
 ap_server_root_relative : enter=0, leave=0

ap_server_root_relative : include/http_config.h line=557 column=20
a
p_server_root_relative(cmd : server/mpm_common.c line=845 column=47
c
md-> : enter=0, leave=0
-
>pool : include/http_config.h line=291 column=17
p
ool, arg : server/mpm_common.c line=846 column=48
a
rg);
857    if : true=0, false=0
i
f (! : true=0, false=0
!
fname : server/mpm_common.c line=850 column=17
f
name) {
858        return : pass=0
r
eturn apr_pstrcat : enter=0, leave=0

apr_pstrcat : /usr/include/apr-1/apr_strings.h line=139 column=28
a
pr_pstrcat(cmd : server/mpm_common.c line=845 column=47
c
md-> : enter=0, leave=0
-
>pool : include/http_config.h line=291 column=17
p
ool, "Invalid CoreDumpDirectory path ",
859                           arg : server/mpm_common.c line=846 column=48
a
rg, NULL);
860    }
861    if : true=0, false=0
i
f ((rv : server/mpm_common.c line=848 column=18
r
= : pass=0
=
 apr_stat : enter=0, leave=0

apr_stat : /usr/include/apr-1/apr_file_info.h line=229 column=27
a
pr_stat(&finfo : server/mpm_common.c line=849 column=17
f
info, fname : server/mpm_common.c line=850 column=17
f
name, APR_FINFO_TYPE, cmd : server/mpm_common.c line=845 column=47
c
md-> : enter=0, leave=0
-
>pool : include/http_config.h line=291 column=17
p
ool)) != : true=0, false=0
!
= APR_SUCCESS) {
862        return : pass=0
r
eturn apr_pstrcat : enter=0, leave=0

apr_pstrcat : /usr/include/apr-1/apr_strings.h line=139 column=28
a
pr_pstrcat(cmd : server/mpm_common.c line=845 column=47
c
md-> : enter=0, leave=0
-
>pool : include/http_config.h line=291 column=17
p
ool, "CoreDumpDirectory ", fname : server/mpm_common.c line=850 column=17
f
name,
863                           " does not exist", NULL);
864    }
865    if : true=0, false=0
i
f (finfo : server/mpm_common.c line=849 column=17
f
info.filetype : /usr/include/apr-1/apr_file_info.h line=186 column=20 filetype != : true=0, false=0
!
APR_DIR : /usr/include/apr-1/apr_file_info.h line=65 column=5 APR_DIR) {
866        return : pass=0
r
eturn apr_pstrcat : enter=0, leave=0

apr_pstrcat : /usr/include/apr-1/apr_strings.h line=139 column=28
a
pr_pstrcat(cmd : server/mpm_common.c line=845 column=47
c
md-> : enter=0, leave=0
-
>pool : include/http_config.h line=291 column=17
p
ool, "CoreDumpDirectory ", fname : server/mpm_common.c line=850 column=17
f
name,
867                           " is not a directory", NULL);
868    }
869    apr_cpystrn : enter=0, leave=0

apr_cpystrn : /usr/include/apr-1/apr_strings.h line=195 column=21
a
pr_cpystrn(ap_coredump_dir : server/mpm_common.c line=842 column=6
a
p_coredump_dir, fname : server/mpm_common.c line=850 column=17
f
name, sizeof(ap_coredump_dir));
870    ap_coredumpdir_configured : server/mpm_common.c line=843 column=5
a
p_coredumpdir_configured = : pass=0
=
 1;
871    return : pass=0
r
eturn NULL;
872}
873#endif
874
875#ifdef AP_MPM_WANT_SET_GRACEFUL_SHUTDOWN
876int ap_graceful_shutdown_timeout = 0;
877
878const char * ap_mpm_set_graceful_shutdown : call=0
a
p_mpm_set_graceful_shutdown(cmd_parms *cmd, void *dummy,
879                                          const char *arg)
880{
881    const char *err = ap_check_cmd_context : enter=0, leave=0

ap_check_cmd_context : include/http_config.h line=710 column=26
a
p_check_cmd_context(cmd : server/mpm_common.c line=878 column=54
c
md, GLOBAL_ONLY);
882    if : true=0, false=0
i
f (err : server/mpm_common.c line=881 column=17
e
rr != : true=0, false=0
!
= NULL) {
883        return : pass=0
r
eturn err : server/mpm_common.c line=881 column=17
e
rr;
884    }
885    ap_graceful_shutdown_timeout : server/mpm_common.c line=876 column=5
a
p_graceful_shutdown_timeout = : pass=0
=
 atoi : enter=0, leave=0

atoi : /usr/include/stdlib.h line=148 column=12
a
toi(arg : server/mpm_common.c line=879 column=55
a
rg);
886    return : pass=0
r
eturn NULL;
887}
888#endif
889
890#ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH
891apr_lockmech_e ap_accept_lock_mech = APR_LOCK_DEFAULT : /usr/include/apr-1/apr_proc_mutex.h line=50 column=5 APR_LOCK_DEFAULT;
892
893const char ap_valid_accept_mutex_string[] =
894    "Valid accept mutexes for this platform and MPM are: default"
895#if APR_HAS_FLOCK_SERIALIZE
896    ", flock"
897#endif
898#if APR_HAS_FCNTL_SERIALIZE
899    ", fcntl"
900#endif
901#if APR_HAS_SYSVSEM_SERIALIZE && !defined(PERCHILD_MPM)
902    ", sysvsem"
903#endif
904#if APR_HAS_POSIXSEM_SERIALIZE
905    ", posixsem"
906#endif
907#if APR_HAS_PROC_PTHREAD_SERIALIZE
908    ", pthread"
909#endif
910    ".";
911
912AP_DECLARE(const char *) ap_mpm_set_accept_lock_mech : call=0
a
p_mpm_set_accept_lock_mech(cmd_parms *cmd,
913                                                     void *dummy,
914                                                     const char *arg)
915{
916    const char *err = ap_check_cmd_context : enter=0, leave=0

ap_check_cmd_context : include/http_config.h line=710 column=26
a
p_check_cmd_context(cmd : server/mpm_common.c line=912 column=65
c
md, GLOBAL_ONLY);
917    if : true=0, false=0
i
f (err : server/mpm_common.c line=916 column=17
e
rr != : true=0, false=0
!
= NULL) {
918        return : pass=0
r
eturn err : server/mpm_common.c line=916 column=17
e
rr;
919    }
920
921    if : true=0, false=0
i
f (! : true=0, false=0
!
strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(arg : server/mpm_common.c line=914 column=66
a
rg, "default")) {
922        ap_accept_lock_mech : server/mpm_common.c line=891 column=16
a
p_accept_lock_mech = : pass=0
=
 APR_LOCK_DEFAULT : /usr/include/apr-1/apr_proc_mutex.h line=50 column=5 APR_LOCK_DEFAULT;
923    }
924#if APR_HAS_FLOCK_SERIALIZE
925    else if : true=0, false=0
i
f (! : true=0, false=0
!
strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(arg : server/mpm_common.c line=914 column=66
a
rg, "flock")) {
926        ap_accept_lock_mech : server/mpm_common.c line=891 column=16
a
p_accept_lock_mech = : pass=0
=
 APR_LOCK_FLOCK : /usr/include/apr-1/apr_proc_mutex.h line=46 column=5 APR_LOCK_FLOCK;
927    }
928#endif
929#if APR_HAS_FCNTL_SERIALIZE
930    else if : true=0, false=0
i
f (! : true=0, false=0
!
strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(arg : server/mpm_common.c line=914 column=66
a
rg, "fcntl")) {
931        ap_accept_lock_mech : server/mpm_common.c line=891 column=16
a
p_accept_lock_mech = : pass=0
=
 APR_LOCK_FCNTL : /usr/include/apr-1/apr_proc_mutex.h line=45 column=5 APR_LOCK_FCNTL;
932    }
933#endif
934
935    /* perchild can't use SysV sems because the permissions on the accept
936     * mutex can't be set to allow all processes to use the mutex and
937     * at the same time keep all users from being able to dink with the
938     * mutex
939     */
940#if APR_HAS_SYSVSEM_SERIALIZE && !defined(PERCHILD_MPM)
941    else if : true=0, false=0
i
f (! : true=0, false=0
!
strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(arg : server/mpm_common.c line=914 column=66
a
rg, "sysvsem")) {
942        ap_accept_lock_mech : server/mpm_common.c line=891 column=16
a
p_accept_lock_mech = : pass=0
=
 APR_LOCK_SYSVSEM : /usr/include/apr-1/apr_proc_mutex.h line=47 column=5 APR_LOCK_SYSVSEM;
943    }
944#endif
945#if APR_HAS_POSIXSEM_SERIALIZE
946    else if : true=0, false=0
i
f (! : true=0, false=0
!
strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(arg : server/mpm_common.c line=914 column=66
a
rg, "posixsem")) {
947        ap_accept_lock_mech : server/mpm_common.c line=891 column=16
a
p_accept_lock_mech = : pass=0
=
 APR_LOCK_POSIXSEM : /usr/include/apr-1/apr_proc_mutex.h line=49 column=5 APR_LOCK_POSIXSEM;
948    }
949#endif
950#if APR_HAS_PROC_PTHREAD_SERIALIZE
951    else if : true=0, false=0
i
f (! : true=0, false=0
!
strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(arg : server/mpm_common.c line=914 column=66
a
rg, "pthread")) {
952        ap_accept_lock_mech : server/mpm_common.c line=891 column=16
a
p_accept_lock_mech = : pass=0
=
 APR_LOCK_PROC_PTHREAD : /usr/include/apr-1/apr_proc_mutex.h line=48 column=5 APR_LOCK_PROC_PTHREAD;
953    }
954#endif
955    else {
956        return : pass=0
r
eturn apr_pstrcat : enter=0, leave=0

apr_pstrcat : /usr/include/apr-1/apr_strings.h line=139 column=28
a
pr_pstrcat(cmd : server/mpm_common.c line=912 column=65
c
md-> : enter=0, leave=0
-
>pool : include/http_config.h line=291 column=17
p
ool, arg : server/mpm_common.c line=914 column=66
a
rg, " is an invalid mutex mechanism; ",
957                           ap_valid_accept_mutex_string : server/mpm_common.c line=893 column=12
a
p_valid_accept_mutex_string, NULL);
958    }
959    return : pass=0
r
eturn NULL;
960}
961
962#endif
963
964#ifdef AP_MPM_WANT_SIGNAL_SERVER
965
966static const char *dash_k_arg;
967
968static int send_signal : call=0
s
end_signal(pid_t pid, int sig)
969{
970    if : true=0, false=0
i
f (kill : enter=0, leave=0

kill : /usr/include/signal.h line=126 column=12
k
ill(pid : server/mpm_common.c line=968 column=30
p
id, sig : server/mpm_common.c line=968 column=39
s
ig) < : true=0, false=0
<
 0) {
971        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_STARTUP, errno, NULL,
972                     "sending signal to server");
973        return : pass=0
r
eturn 1;
974    }
975    return : pass=0
r
eturn 0;
976}
977
978int ap_signal_server : call=0
a
p_signal_server(int *exit_status, apr_pool_t *pconf)
979{
980    apr_status_t rv;
981    pid_t otherpid;
982    int running = 0;
983    const char *status;
984
985    *exit_status : server/mpm_common.c line=978 column=27
e
xit_status = : enter=0, leave=0
=
 0;
986
987    rv : server/mpm_common.c line=980 column=18
r
= : pass=0
=
 ap_read_pid : enter=0, leave=0

ap_read_pid : include/http_log.h line=269 column=26
a
p_read_pid(pconf : server/mpm_common.c line=978 column=52
p
conf, ap_pid_fname : server/mpm_common.c line=775 column=13
a
p_pid_fname, &otherpid : server/mpm_common.c line=981 column=11
o
therpid);
988    if : true=0, false=0
i
f (rv : server/mpm_common.c line=980 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
989        if : true=0, false=0
i
f (rv : server/mpm_common.c line=980 column=18
r
!= : true=0, false=0
!
= APR_ENOENT) {
990            ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_STARTUP, rv : server/mpm_common.c line=980 column=18
r
v, NULL,
991                         "Error retrieving pid file %s", ap_pid_fname : server/mpm_common.c line=775 column=13
a
p_pid_fname);
992            ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL,
993                         "Remove it before continuing if it is corrupted.");
994            *exit_status : server/mpm_common.c line=978 column=27
e
xit_status = : enter=0, leave=0
=
 1;
995            return : pass=0
r
eturn 1;
996        }
997        status : server/mpm_common.c line=983 column=17
s
tatus = : pass=0
=
 "httpd (no pid file) not running";
998    }
999    else {
1000        if : true=0, false=0
i
f (kill : enter=0, leave=0

kill : /usr/include/signal.h line=126 column=12
k
ill(otherpid : server/mpm_common.c line=981 column=11
o
therpid, 0) == : true=0, false=0
=
= 0) {
1001            running : server/mpm_common.c line=982 column=9
r
unning = : pass=0
=
 1;
1002            status : server/mpm_common.c line=983 column=17
s
tatus = : pass=0
=
 apr_psprintf : enter=0, leave=0

apr_psprintf : /usr/include/apr-1/apr_strings.h line=170 column=28
a
pr_psprintf(pconf : server/mpm_common.c line=978 column=52
p
conf,
1003                                  "httpd (pid %" APR_PID_T_FMT ") already "
1004                                  "running", otherpid : server/mpm_common.c line=981 column=11
o
therpid);
1005        }
1006        else {
1007            status : server/mpm_common.c line=983 column=17
s
tatus = : pass=0
=
 apr_psprintf : enter=0, leave=0

apr_psprintf : /usr/include/apr-1/apr_strings.h line=170 column=28
a
pr_psprintf(pconf : server/mpm_common.c line=978 column=52
p
conf,
1008                                  "httpd (pid %" APR_PID_T_FMT "?) not running",
1009                                  otherpid : server/mpm_common.c line=981 column=11
o
therpid);
1010        }
1011    }
1012
1013    if : true=0, false=0
i
f (! : true=0, false=0
!
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(dash_k_arg : server/mpm_common.c line=966 column=20
d
ash_k_arg, "start")) {
1014        if : true=0, false=0
i
f (running : server/mpm_common.c line=982 column=9
r
unning) {
1015            printf : enter=0, leave=0

printf : /usr/include/stdio.h line=361 column=12
p
rintf("%s\n", status : server/mpm_common.c line=983 column=17
s
tatus);
1016            return : pass=0
r
eturn 1;
1017        }
1018    }
1019
1020    if : true=0, false=0
i
f (! : true=0, false=0
!
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(dash_k_arg : server/mpm_common.c line=966 column=20
d
ash_k_arg, "stop")) {
1021        if : true=0, false=0
i
f (! : true=0, false=0
!
running : server/mpm_common.c line=982 column=9
r
unning) {
1022            printf : enter=0, leave=0

printf : /usr/include/stdio.h line=361 column=12
p
rintf("%s\n", status : server/mpm_common.c line=983 column=17
s
tatus);
1023        }
1024        else {
1025            send_signal : enter=0, leave=0

send_signal : server/mpm_common.c line=968 column=12
s
end_signal(otherpid : server/mpm_common.c line=981 column=11
o
therpid, SIGTERM);
1026        }
1027        return : pass=0
r
eturn 1;
1028    }
1029
1030    if : true=0, false=0
i
f (! : true=0, false=0
!
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(dash_k_arg : server/mpm_common.c line=966 column=20
d
ash_k_arg, "restart")) {
1031        if : true=0, false=0
i
f (! : true=0, false=0
!
running : server/mpm_common.c line=982 column=9
r
unning) {
1032            printf : enter=0, leave=0

printf : /usr/include/stdio.h line=361 column=12
p
rintf("httpd not running, trying to start\n");
1033        }
1034        else {
1035            *exit_status : server/mpm_common.c line=978 column=27
e
xit_status = : enter=0, leave=0
=
 send_signal : enter=0, leave=0

send_signal : server/mpm_common.c line=968 column=12
s
end_signal(otherpid : server/mpm_common.c line=981 column=11
o
therpid, SIGHUP);
1036            return : pass=0
r
eturn 1;
1037        }
1038    }
1039
1040    if : true=0, false=0
i
f (! : true=0, false=0
!
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(dash_k_arg : server/mpm_common.c line=966 column=20
d
ash_k_arg, "graceful")) {
1041        if : true=0, false=0
i
f (! : true=0, false=0
!
running : server/mpm_common.c line=982 column=9
r
unning) {
1042            printf : enter=0, leave=0

printf : /usr/include/stdio.h line=361 column=12
p
rintf("httpd not running, trying to start\n");
1043        }
1044        else {
1045            *exit_status : server/mpm_common.c line=978 column=27
e
xit_status = : enter=0, leave=0
=
 send_signal : enter=0, leave=0

send_signal : server/mpm_common.c line=968 column=12
s
end_signal(otherpid : server/mpm_common.c line=981 column=11
o
therpid, AP_SIG_GRACEFUL);
1046            return : pass=0
r
eturn 1;
1047        }
1048    }
1049
1050    if : true=0, false=0
i
f (! : true=0, false=0
!
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(dash_k_arg : server/mpm_common.c line=966 column=20
d
ash_k_arg, "graceful-stop")) {
1051#ifdef AP_MPM_WANT_SET_GRACEFUL_SHUTDOWN
1052        if : true=0, false=0
i
f (! : true=0, false=0
!
running : server/mpm_common.c line=982 column=9
r
unning) {
1053            printf : enter=0, leave=0

printf : /usr/include/stdio.h line=361 column=12
p
rintf("%s\n", status : server/mpm_common.c line=983 column=17
s
tatus);
1054        }
1055        else {
1056            *exit_status : server/mpm_common.c line=978 column=27
e
xit_status = : enter=0, leave=0
=
 send_signal : enter=0, leave=0

send_signal : server/mpm_common.c line=968 column=12
s
end_signal(otherpid : server/mpm_common.c line=981 column=11
o
therpid, AP_SIG_GRACEFUL_STOP);
1057        }
1058#else
1059        printf("httpd MPM \"" MPM_NAME "\" does not support graceful-stop\n");
1060#endif
1061        return : pass=0
r
eturn 1;
1062    }
1063
1064    return : pass=0
r
eturn 0;
1065}
1066
1067void ap_mpm_rewrite_args : call=1
a
p_mpm_rewrite_args(process_rec *process)
1068{
1069    apr_array_header_t *mpm_new_argv;
1070    apr_status_t rv;
1071    apr_getopt_t *opt;
1072    char optbuf[3];
1073    const char *optarg;
1074
1075    mpm_new_argv : server/mpm_common.c line=1069 column=25
m
pm_new_argv = : pass=1
=
 apr_array_make : enter=1, leave=1

apr_array_make : /usr/include/apr-1/apr_tables.h line=111 column=35
a
pr_array_make(process : server/mpm_common.c line=1067 column=39
p
rocess-> : enter=1, leave=1
-
>pool : include/httpd.h line=764 column=17
p
ool, process : server/mpm_common.c line=1067 column=39
p
rocess-> : enter=1, leave=1
-
>argc : include/httpd.h line=768 column=9
a
rgc,
1076                                  sizeof(const char **));
1077    *(const char **)apr_array_push : enter=1, leave=1

apr_array_push : /usr/include/apr-1/apr_tables.h line=121 column=21
a
pr_array_push(mpm_new_argv : server/mpm_common.c line=1069 column=25
m
pm_new_argv) = : enter=1, leave=1
=
 process : server/mpm_common.c line=1067 column=39
p
rocess-> : enter=1, leave=1
-
>argv : include/httpd.h line=770 column=25
a
rgv[] : enter=1, leave=1
[
0];
1078    apr_getopt_init : enter=1, leave=1

apr_getopt_init : /usr/include/apr-1/apr_getopt.h line=103 column=27
a
pr_getopt_init(&opt : server/mpm_common.c line=1071 column=19
o
pt, process : server/mpm_common.c line=1067 column=39
p
rocess-> : enter=1, leave=1
-
>pool : include/httpd.h line=764 column=17
p
ool, process : server/mpm_common.c line=1067 column=39
p
rocess-> : enter=1, leave=1
-
>argc : include/httpd.h line=768 column=9
a
rgc, process : server/mpm_common.c line=1067 column=39
p
rocess-> : enter=1, leave=1
-
>argv : include/httpd.h line=770 column=25
a
rgv);
1079    opt : server/mpm_common.c line=1071 column=19
o
pt-> : enter=1, leave=1
-
>errfn : /usr/include/apr-1/apr_getopt.h line=54 column=26 errfn = : enter=1, leave=1
=
 NULL;
1080    optbuf : server/mpm_common.c line=1072 column=10
o
ptbuf[0] = : enter=1, leave=1
=
 '-';
1081    /* option char returned by apr_getopt() will be stored in optbuf[1] */
1082    optbuf : server/mpm_common.c line=1072 column=10
o
ptbuf[2] = : enter=1, leave=1
=
 '\0';
1083    while : true=0, false=1
w
hile ((rv : server/mpm_common.c line=1070 column=18
r
= : pass=1
=
 apr_getopt : enter=1, leave=1

apr_getopt : /usr/include/apr-1/apr_getopt.h line=122 column=27
a
pr_getopt(opt : server/mpm_common.c line=1071 column=19
o
pt, "k:" AP_SERVER_BASEARGS,
1084                            optbuf : server/mpm_common.c line=1072 column=10
o
ptbuf + : pass=1
+
 1, &optarg : server/mpm_common.c line=1073 column=17
o
ptarg)) == : true=0, false=1
=
= APR_SUCCESS) {
1085        switch : pass=0
s
witch(optbuf : server/mpm_common.c line=1072 column=10
o
ptbuf[] : enter=0, leave=0
[
1]) {
1086        case : true=0, false=0
c
ase 'k':
1087            if : true=0, false=0
i
f (! : true=0, false=0
!
dash_k_arg : server/mpm_common.c line=966 column=20
d
ash_k_arg) {
1088                if : true=0, false=0
i
f (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(optarg : server/mpm_common.c line=1073 column=17
o
ptarg, "start") || : true=0, false=0
|
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(optarg : server/mpm_common.c line=1073 column=17
o
ptarg, "stop") || : true=0, false=0
|
|
1089                    ! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(optarg : server/mpm_common.c line=1073 column=17
o
ptarg, "restart") || : true=0, false=0
|
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(optarg : server/mpm_common.c line=1073 column=17
o
ptarg, "graceful") || : true=0, false=0
|
|
1090                    ! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(optarg : server/mpm_common.c line=1073 column=17
o
ptarg, "graceful-stop")) {
1091                    dash_k_arg : server/mpm_common.c line=966 column=20
d
ash_k_arg = : pass=0
=
 optarg : server/mpm_common.c line=1073 column=17
o
ptarg;
1092                    break : pass=0
b
reak;
1093                }
1094            }
1095        default : true=0, false=0
d
efault:
1096            *(const char **)apr_array_push : enter=0, leave=0

apr_array_push : /usr/include/apr-1/apr_tables.h line=121 column=21
a
pr_array_push(mpm_new_argv : server/mpm_common.c line=1069 column=25
m
pm_new_argv) = : enter=0, leave=0
=
1097                apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(process : server/mpm_common.c line=1067 column=39
p
rocess-> : enter=0, leave=0
-
>pool : include/httpd.h line=764 column=17
p
ool, optbuf : server/mpm_common.c line=1072 column=10
o
ptbuf);
1098            if : true=0, false=0
i
f (optarg : server/mpm_common.c line=1073 column=17
o
ptarg) {
1099                *(const char **)apr_array_push : enter=0, leave=0

apr_array_push : /usr/include/apr-1/apr_tables.h line=121 column=21
a
pr_array_push(mpm_new_argv : server/mpm_common.c line=1069 column=25
m
pm_new_argv) = : enter=0, leave=0
=
 optarg : server/mpm_common.c line=1073 column=17
o
ptarg;
1100            }
1101        }
1102    }
1103
1104    /* back up to capture the bad argument */
1105    if : true=0, false=1
i
f (rv : server/mpm_common.c line=1070 column=18
r
== : true=0, false=1
MC/DC independently affect : true=0, false=1
=TF
= APR_BADCH || : true=0, false=1
|
rv : server/mpm_common.c line=1070 column=18
r
== : true=0, false=1
MC/DC independently affect : true=0, false=1
=TF
= APR_BADARG) {
1106        opt : server/mpm_common.c line=1071 column=19
o
pt-> : enter=0, leave=0
-
>ind : /usr/include/apr-1/apr_getopt.h line=58 column=9 ind-- : pass=0
-
-;
1107    }
1108
1109    while : true=0, false=1
w
hile (opt : server/mpm_common.c line=1071 column=19
o
pt-> : enter=1, leave=1
-
>ind : /usr/include/apr-1/apr_getopt.h line=58 column=9 ind < : true=0, false=1
<
 opt : server/mpm_common.c line=1071 column=19
o
pt-> : enter=1, leave=1
-
>argc : /usr/include/apr-1/apr_getopt.h line=64 column=9 argc) {
1110        *(const char **)apr_array_push : enter=0, leave=0

apr_array_push : /usr/include/apr-1/apr_tables.h line=121 column=21
a
pr_array_push(mpm_new_argv : server/mpm_common.c line=1069 column=25
m
pm_new_argv) = : enter=0, leave=0
=
1111            apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(process : server/mpm_common.c line=1067 column=39
p
rocess-> : enter=0, leave=0
-
>pool : include/httpd.h line=764 column=17
p
ool, opt : server/mpm_common.c line=1071 column=19
o
pt-> : enter=0, leave=0
-
>argv : /usr/include/apr-1/apr_getopt.h line=66 column=18 argv[] : enter=0, leave=0
[
opt : server/mpm_common.c line=1071 column=19
o
pt-> : enter=0, leave=0
-
>ind : /usr/include/apr-1/apr_getopt.h line=58 column=9 ind++ : pass=0
+
+]);
1112    }
1113
1114    process : server/mpm_common.c line=1067 column=39
p
rocess-> : enter=1, leave=1
-
>argc : include/httpd.h line=768 column=9
a
rgc = : enter=1, leave=1
=
 mpm_new_argv : server/mpm_common.c line=1069 column=25
m
pm_new_argv-> : enter=1, leave=1
-
>nelts : /usr/include/apr-1/apr_tables.h line=58 column=9 nelts;
1115    process : server/mpm_common.c line=1067 column=39
p
rocess-> : enter=1, leave=1
-
>argv : include/httpd.h line=770 column=25
a
rgv = : enter=1, leave=1
=
 (const char * const *)mpm_new_argv : server/mpm_common.c line=1069 column=25
m
pm_new_argv-> : enter=1, leave=1
-
>elts : /usr/include/apr-1/apr_tables.h line=62 column=11 elts;
1116
1117    if : true=0, false=1
i
f (dash_k_arg : server/mpm_common.c line=966 column=20
d
ash_k_arg) {
1118        APR_REGISTER_OPTIONAL_FN(ap_signal_server : server/mpm_common.c line=978 column=5
a
p_signal_server);
1119    }
1120}
1121
1122#endif /* AP_MPM_WANT_SIGNAL_SERVER */
1123
1124#ifdef AP_MPM_WANT_SET_MAX_MEM_FREE
1125apr_uint32_t ap_max_mem_free = APR_ALLOCATOR_MAX_FREE_UNLIMITED;
1126
1127const char *ap_mpm_set_max_mem_free : call=0
a
p_mpm_set_max_mem_free(cmd_parms *cmd, void *dummy,
1128                                    const char *arg)
1129{
1130    long value;
1131    const char *err = ap_check_cmd_context : enter=0, leave=0

ap_check_cmd_context : include/http_config.h line=710 column=26
a
p_check_cmd_context(cmd : server/mpm_common.c line=1127 column=48
c
md, GLOBAL_ONLY);
1132    if : true=0, false=0
i
f (err : server/mpm_common.c line=1131 column=17
e
rr != : true=0, false=0
!
= NULL) {
1133        return : pass=0
r
eturn err : server/mpm_common.c line=1131 column=17
e
rr;
1134    }
1135
1136    value : server/mpm_common.c line=1130 column=10
v
alue = : pass=0
=
 strtol : enter=0, leave=0

strtol : /usr/include/stdlib.h line=184 column=17
s
trtol(arg : server/mpm_common.c line=1128 column=49
a
rg, NULL, 0);
1137    if : true=0, false=0
i
f (value : server/mpm_common.c line=1130 column=10
v
alue < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 0 || : true=0, false=0
|
| errno == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ERANGE)
1138        return : pass=0
r
eturn apr_pstrcat : enter=0, leave=0

apr_pstrcat : /usr/include/apr-1/apr_strings.h line=139 column=28
a
pr_pstrcat(cmd : server/mpm_common.c line=1127 column=48
c
md-> : enter=0, leave=0
-
>pool : include/http_config.h line=291 column=17
p
ool, "Invalid MaxMemFree value: ",
1139                           arg : server/mpm_common.c line=1128 column=49
a
rg, NULL);
1140
1141    ap_max_mem_free : server/mpm_common.c line=1125 column=14
a
p_max_mem_free = : pass=0
=
 (apr_uint32_t)value : server/mpm_common.c line=1130 column=10
v
alue * : pass=0
*
 1024;
1142
1143    return : pass=0
r
eturn NULL;
1144}
1145
1146#endif /* AP_MPM_WANT_SET_MAX_MEM_FREE */
1147
1148#ifdef AP_MPM_WANT_SET_STACKSIZE
1149apr_size_t ap_thread_stacksize = 0; /* use system default */
1150
1151const char *ap_mpm_set_thread_stacksize(cmd_parms *cmd, void *dummy,
1152                                        const char *arg)
1153{
1154    long value;
1155    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
1156    if (err != NULL) {
1157        return err;
1158    }
1159
1160    value = strtol(arg, NULL, 0);
1161    if (value < 0 || errno == ERANGE)
1162        return apr_pstrcat(cmd->pool, "Invalid ThreadStackSize value: ",
1163                           arg, NULL);
1164
1165    ap_thread_stacksize = (apr_size_t)value;
1166
1167    return NULL;
1168}
1169
1170#endif /* AP_MPM_WANT_SET_STACKSIZE */
1171
1172#ifdef AP_MPM_WANT_FATAL_SIGNAL_HANDLER
1173
1174static pid_t parent_pid, my_pid;
1175apr_pool_t *pconf;
1176
1177#if AP_ENABLE_EXCEPTION_HOOK
1178
1179static int exception_hook_enabled;
1180
1181const char *ap_mpm_set_exception_hook(cmd_parms *cmd, void *dummy,
1182                                      const char *arg)
1183{
1184    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
1185    if (err != NULL) {
1186        return err;
1187    }
1188
1189    if (cmd->server->is_virtual) {
1190        return "EnableExceptionHook directive not allowed in <VirtualHost>";
1191    }
1192
1193    if (strcasecmp(arg, "on") == 0) {
1194        exception_hook_enabled = 1;
1195    }
1196    else if (strcasecmp(arg, "off") == 0) {
1197        exception_hook_enabled = 0;
1198    }
1199    else {
1200        return "parameter must be 'on' or 'off'";
1201    }
1202
1203    return NULL;
1204}
1205
1206static void run_fatal_exception_hook(int sig)
1207{
1208    ap_exception_info_t ei = {0};
1209
1210    if (exception_hook_enabled &&
1211        geteuid() != 0 &&
1212        my_pid != parent_pid) {
1213        ei.sig = sig;
1214        ei.pid = my_pid;
1215        ap_run_fatal_exception(&ei);
1216    }
1217}
1218#endif /* AP_ENABLE_EXCEPTION_HOOK */
1219
1220/* handle all varieties of core dumping signals */
1221static void sig_coredump : call=0
s
ig_coredump(int sig)
1222{
1223    apr_filepath_set : enter=0, leave=0

apr_filepath_set : /usr/include/apr-1/apr_file_info.h line=401 column=27
a
pr_filepath_set(ap_coredump_dir : server/mpm_common.c line=842 column=6
a
p_coredump_dir, pconf : server/mpm_common.c line=1175 column=13
p
conf);
1224    apr_signal : enter=0, leave=0

apr_signal : /usr/include/apr-1/apr_signal.h line=64 column=30
a
pr_signal(sig : server/mpm_common.c line=1221 column=30
s
ig, SIG_DFL);
1225#if AP_ENABLE_EXCEPTION_HOOK
1226    run_fatal_exception_hook(sig);
1227#endif
1228    /* linuxthreads issue calling getpid() here:
1229     *   This comparison won't match if the crashing thread is
1230     *   some module's thread that runs in the parent process.
1231     *   The fallout, which is limited to linuxthreads:
1232     *   The special log message won't be written when such a
1233     *   thread in the parent causes the parent to crash.
1234     */
1235    if : true=0, false=0
i
f (getpid : enter=0, leave=0

getpid : /usr/include/unistd.h line=625 column=16
g
etpid() == : true=0, false=0
=
parent_pid : server/mpm_common.c line=1174 column=14
p
arent_pid) {
1236        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_NOTICE,
1237                     0, ap_server_conf : server/mpm/prefork/mpm.h line=60 column=20
a
p_server_conf,
1238                     "seg fault or similar nasty error detected "
1239                     "in the parent process");
1240        /* XXX we can probably add some rudimentary cleanup code here,
1241         * like getting rid of the pid file.  If any additional bad stuff
1242         * happens, we are protected from recursive errors taking down the
1243         * system since this function is no longer the signal handler   GLA
1244         */
1245    }
1246    kill : enter=0, leave=0

kill : /usr/include/signal.h line=126 column=12
k
ill(getpid : enter=0, leave=0

getpid : /usr/include/unistd.h line=625 column=16
g
etpid(), sig : server/mpm_common.c line=1221 column=30
s
ig);
1247    /* At this point we've got sig blocked, because we're still inside
1248     * the signal handler.  When we leave the signal handler it will
1249     * be unblocked, and we'll take the signal... and coredump or whatever
1250     * is appropriate for this particular Unix.  In addition the parent
1251     * will see the real signal we received -- whereas if we called
1252     * abort() here, the parent would only see SIGABRT.
1253     */
1254}
1255
1256apr_status_t ap_fatal_signal_child_setup : call=0
a
p_fatal_signal_child_setup(server_rec *s)
1257{
1258    my_pid : server/mpm_common.c line=1174 column=26
m
y_pid = : pass=0
=
 getpid : enter=0, leave=0

getpid : /usr/include/unistd.h line=625 column=16
g
etpid();
1259    return : pass=0
r
eturn APR_SUCCESS;
1260}
1261
1262apr_status_t ap_fatal_signal_setup : call=0
a
p_fatal_signal_setup(server_rec *s, apr_pool_t *in_pconf)
1263{
1264#ifndef NO_USE_SIGACTION
1265    struct sigaction sa;
1266
1267    sigemptyset : enter=0, leave=0

sigemptyset : /usr/include/signal.h line=222 column=12
s
igemptyset(&sa : server/mpm_common.c line=1265 column=22
s
a.sa_mask : /usr/include/bits/sigaction.h line=44 column=16 sa_mask);
1268
1269#if defined(SA_ONESHOT)
1270    sa : server/mpm_common.c line=1265 column=22
s
a.sa_flags : /usr/include/bits/sigaction.h line=47 column=9 sa_flags = : pass=0
=
 SA_ONESHOT;
1271#elif defined(SA_RESETHAND)
1272    sa.sa_flags = SA_RESETHAND;
1273#else
1274    sa.sa_flags = 0;
1275#endif
1276
1277    sa : server/mpm_common.c line=1265 column=22
s
a.sa_handler = : pass=0
=
 sig_coredump : server/mpm_common.c line=1221 column=13
s
ig_coredump;
1278    if : true=0, false=0
i
f (sigaction : enter=0, leave=0

sigaction : /usr/include/signal.h line=266 column=12
s
igaction(SIGSEGV, &sa : server/mpm_common.c line=1265 column=22
s
a, NULL) < : true=0, false=0
<
 0)
1279        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_WARNING, errno, s : server/mpm_common.c line=1262 column=48
s
, "sigaction(SIGSEGV)");
1280#ifdef SIGBUS
1281    if : true=0, false=0
i
f (sigaction : enter=0, leave=0

sigaction : /usr/include/signal.h line=266 column=12
s
igaction(SIGBUS, &sa : server/mpm_common.c line=1265 column=22
s
a, NULL) < : true=0, false=0
<
 0)
1282        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_WARNING, errno, s : server/mpm_common.c line=1262 column=48
s
, "sigaction(SIGBUS)");
1283#endif
1284#ifdef SIGABORT
1285    if (sigaction(SIGABORT, &sa, NULL) < 0)
1286        ap_log_error(APLOG_MARK, APLOG_WARNING, errno, s, "sigaction(SIGABORT)");
1287#endif
1288#ifdef SIGABRT
1289    if : true=0, false=0
i
f (sigaction : enter=0, leave=0

sigaction : /usr/include/signal.h line=266 column=12
s
igaction(SIGABRT, &sa : server/mpm_common.c line=1265 column=22
s
a, NULL) < : true=0, false=0
<
 0)
1290        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_WARNING, errno, s : server/mpm_common.c line=1262 column=48
s
, "sigaction(SIGABRT)");
1291#endif
1292#ifdef SIGILL
1293    if : true=0, false=0
i
f (sigaction : enter=0, leave=0

sigaction : /usr/include/signal.h line=266 column=12
s
igaction(SIGILL, &sa : server/mpm_common.c line=1265 column=22
s
a, NULL) < : true=0, false=0
<
 0)
1294        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_WARNING, errno, s : server/mpm_common.c line=1262 column=48
s
, "sigaction(SIGILL)");
1295#endif
1296#ifdef SIGFPE
1297    if : true=0, false=0
i
f (sigaction : enter=0, leave=0

sigaction : /usr/include/signal.h line=266 column=12
s
igaction(SIGFPE, &sa : server/mpm_common.c line=1265 column=22
s
a, NULL) < : true=0, false=0
<
 0)
1298        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_WARNING, errno, s : server/mpm_common.c line=1262 column=48
s
, "sigaction(SIGFPE)");
1299#endif
1300
1301#else /* NO_USE_SIGACTION */
1302
1303    apr_signal(SIGSEGV, sig_coredump);
1304#ifdef SIGBUS
1305    apr_signal(SIGBUS, sig_coredump);
1306#endif /* SIGBUS */
1307#ifdef SIGABORT
1308    apr_signal(SIGABORT, sig_coredump);
1309#endif /* SIGABORT */
1310#ifdef SIGABRT
1311    apr_signal(SIGABRT, sig_coredump);
1312#endif /* SIGABRT */
1313#ifdef SIGILL
1314    apr_signal(SIGILL, sig_coredump);
1315#endif /* SIGILL */
1316#ifdef SIGFPE
1317    apr_signal(SIGFPE, sig_coredump);
1318#endif /* SIGFPE */
1319
1320#endif /* NO_USE_SIGACTION */
1321
1322    pconf : server/mpm_common.c line=1175 column=13
p
conf = : pass=0
=
 in_pconf : server/mpm_common.c line=1262 column=63
i
n_pconf;
1323    parent_pid : server/mpm_common.c line=1174 column=14
p
arent_pid = : pass=0
=
 my_pid : server/mpm_common.c line=1174 column=26
m
y_pid = : pass=0
=
 getpid : enter=0, leave=0

getpid : /usr/include/unistd.h line=625 column=16
g
etpid();
1324
1325    return : pass=0
r
eturn APR_SUCCESS;
1326}
1327
1328#endif /* AP_MPM_WANT_FATAL_SIGNAL_HANDLER */
1329[EOF]


Generated by expcov