summaryrefslogtreecommitdiff
path: root/modules/generators
diff options
context:
space:
mode:
authorStefan Fritsch <sf@sfritsch.de>2015-08-02 00:19:16 +0200
committerStefan Fritsch <sf@sfritsch.de>2015-08-02 00:19:16 +0200
commit48802c25dc82a8b13ac351c0c2137ef748256bbd (patch)
treedcaa03f7f34153303fe5afbc9c99dbb8c44b22b3 /modules/generators
parent080d5e16db802902200a9ce5b6c40f8f1fdc1f73 (diff)
downloadapache2-48802c25dc82a8b13ac351c0c2137ef748256bbd.tar.gz
Imported Upstream version 2.4.16
Diffstat (limited to 'modules/generators')
-rw-r--r--modules/generators/mod_asis.c2
-rw-r--r--modules/generators/mod_cgi.c2
-rw-r--r--modules/generators/mod_cgid.c31
-rw-r--r--modules/generators/mod_status.c40
4 files changed, 64 insertions, 11 deletions
diff --git a/modules/generators/mod_asis.c b/modules/generators/mod_asis.c
index c947e303..c2b651be 100644
--- a/modules/generators/mod_asis.c
+++ b/modules/generators/mod_asis.c
@@ -101,7 +101,7 @@ static int asis_handler(request_rec *r)
if (rv != APR_SUCCESS) {
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(01236)
"mod_asis: ap_pass_brigade failed for file %s", r->filename);
- return HTTP_INTERNAL_SERVER_ERROR;
+ return AP_FILTER_ERROR;
}
}
else {
diff --git a/modules/generators/mod_cgi.c b/modules/generators/mod_cgi.c
index beb02f27..ffbef7eb 100644
--- a/modules/generators/mod_cgi.c
+++ b/modules/generators/mod_cgi.c
@@ -857,7 +857,7 @@ static int cgi_handler(request_rec *r)
}
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(01225)
"Error reading request entity data");
- return HTTP_INTERNAL_SERVER_ERROR;
+ return ap_map_http_request_error(rv, HTTP_BAD_REQUEST);
}
for (bucket = APR_BRIGADE_FIRST(bb);
diff --git a/modules/generators/mod_cgid.c b/modules/generators/mod_cgid.c
index 26022d84..4cebd045 100644
--- a/modules/generators/mod_cgid.c
+++ b/modules/generators/mod_cgid.c
@@ -170,6 +170,10 @@ static int is_scriptaliased(request_rec *r)
#define DEFAULT_CONNECT_ATTEMPTS 15
#endif
+#ifndef DEFAULT_CONNECT_STARTUP_DELAY
+#define DEFAULT_CONNECT_STARTUP_DELAY 60
+#endif
+
typedef struct {
const char *logname;
long logbytes;
@@ -1203,18 +1207,26 @@ static int connect_to_daemon(int *sdptr, request_rec *r,
{
int sd;
int connect_tries;
+ int connect_errno;
apr_interval_time_t sliding_timer;
connect_tries = 0;
sliding_timer = 100000; /* 100 milliseconds */
while (1) {
+ connect_errno = 0;
++connect_tries;
if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
return log_scripterror(r, conf, HTTP_INTERNAL_SERVER_ERROR, errno,
APLOGNO(01255) "unable to create socket to cgi daemon");
}
if (connect(sd, (struct sockaddr *)server_addr, server_addr_len) < 0) {
- if (errno == ECONNREFUSED && connect_tries < DEFAULT_CONNECT_ATTEMPTS) {
+ /* Save errno for later */
+ connect_errno = errno;
+ /* ECONNREFUSED means the listen queue is full; ENOENT means that
+ * the cgid server either hasn't started up yet, or we're pointing
+ * at the wrong socket file */
+ if ((errno == ECONNREFUSED || errno == ENOENT) &&
+ connect_tries < DEFAULT_CONNECT_ATTEMPTS) {
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, errno, r, APLOGNO(01256)
"connect #%d to cgi daemon failed, sleeping before retry",
connect_tries);
@@ -1235,9 +1247,20 @@ static int connect_to_daemon(int *sdptr, request_rec *r,
close_unix_socket, apr_pool_cleanup_null);
break; /* we got connected! */
}
+
+ /* If we didn't find the socket but the server was not recently restarted,
+ * chances are there's something wrong with the cgid daemon
+ */
+ if (connect_errno == ENOENT &&
+ apr_time_sec(apr_time_now() - ap_scoreboard_image->global->restart_time) >
+ DEFAULT_CONNECT_STARTUP_DELAY) {
+ return log_scripterror(r, conf, HTTP_SERVICE_UNAVAILABLE, connect_errno,
+ apr_pstrcat(r->pool, APLOGNO(02833) "ScriptSock ", sockname, " does not exist", NULL));
+ }
+
/* gotta try again, but make sure the cgid daemon is still around */
- if (kill(daemon_pid, 0) != 0) {
- return log_scripterror(r, conf, HTTP_SERVICE_UNAVAILABLE, errno, APLOGNO(01258)
+ if (connect_errno != ENOENT && kill(daemon_pid, 0) != 0) {
+ return log_scripterror(r, conf, HTTP_SERVICE_UNAVAILABLE, connect_errno, APLOGNO(01258)
"cgid daemon is gone; is Apache terminating?");
}
}
@@ -1502,7 +1525,7 @@ static int cgid_handler(request_rec *r)
}
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, APLOGNO(01270)
"Error reading request entity data");
- return HTTP_INTERNAL_SERVER_ERROR;
+ return ap_map_http_request_error(rv, HTTP_BAD_REQUEST);
}
for (bucket = APR_BRIGADE_FIRST(bb);
diff --git a/modules/generators/mod_status.c b/modules/generators/mod_status.c
index 6bcf592b..9bd4e8aa 100644
--- a/modules/generators/mod_status.c
+++ b/modules/generators/mod_status.c
@@ -126,7 +126,7 @@ static void format_kbyte_out(request_rec *r, apr_off_t kbytes)
ap_rprintf(r, "%.1f GB", (float) kbytes / MBYTE);
}
-static void show_time(request_rec *r, apr_interval_time_t tsecs)
+static void show_time(request_rec *r, apr_uint32_t tsecs)
{
int days, hrs, mins, secs;
@@ -183,7 +183,8 @@ static int status_handler(request_rec *r)
{
const char *loc;
apr_time_t nowtime;
- apr_interval_time_t up_time;
+ apr_uint32_t up_time;
+ ap_loadavg_t t;
int j, i, res, written;
int ready;
int busy;
@@ -391,10 +392,9 @@ static int status_handler(request_rec *r)
/* up_time in seconds */
up_time = (apr_uint32_t) apr_time_sec(nowtime -
ap_scoreboard_image->global->restart_time);
+ ap_get_loadavg(&t);
if (!short_report) {
- ap_loadavg_t t;
-
ap_rputs(DOCTYPE_HTML_3_2
"<html><head>\n"
"<title>Apache Status</title>\n"
@@ -424,10 +424,37 @@ static int status_handler(request_rec *r)
ap_rputs("<dt>Server uptime: ", r);
show_time(r, up_time);
ap_rputs("</dt>\n", r);
- ap_get_loadavg(&t);
ap_rprintf(r, "<dt>Server load: %.2f %.2f %.2f</dt>\n",
t.loadavg, t.loadavg5, t.loadavg15);
}
+ else {
+ ap_rvputs(r, ap_get_server_name(r), "\n", NULL);
+ ap_rvputs(r, "ServerVersion: ",
+ ap_get_server_description(), "\n", NULL);
+ ap_rvputs(r, "ServerMPM: ",
+ ap_show_mpm(), "\n", NULL);
+ ap_rvputs(r, "Server Built: ",
+ ap_get_server_built(), "\n", NULL);
+ ap_rvputs(r, "CurrentTime: ",
+ ap_ht_time(r->pool, nowtime, DEFAULT_TIME_FORMAT, 0),
+ "\n", NULL);
+ ap_rvputs(r, "RestartTime: ",
+ ap_ht_time(r->pool,
+ ap_scoreboard_image->global->restart_time,
+ DEFAULT_TIME_FORMAT, 0),
+ "\n", NULL);
+ ap_rprintf(r, "ParentServerConfigGeneration: %d\n",
+ ap_state_query(AP_SQ_CONFIG_GEN));
+ ap_rprintf(r, "ParentServerMPMGeneration: %d\n",
+ (int)mpm_generation);
+ ap_rprintf(r, "ServerUptimeSeconds: %u\n",
+ up_time);
+ ap_rputs("ServerUptime:", r);
+ show_time(r, up_time);
+ ap_rputs("\n", r);
+ ap_rprintf(r, "Load1: %.2f\nLoad5: %.2f\nLoad15: %.2f\n",
+ t.loadavg, t.loadavg5, t.loadavg15);
+ }
if (ap_extended_status) {
if (short_report) {
@@ -437,6 +464,9 @@ static int status_handler(request_rec *r)
#ifdef HAVE_TIMES
/* Allow for OS/2 not having CPU stats */
+ ap_rprintf(r, "CPUUser: %g\nCPUSystem: %g\nCPUChildrenUser: %g\nCPUChildrenSystem: %g\n",
+ tu / tick, ts / tick, tcu / tick, tcs / tick);
+
if (ts || tu || tcu || tcs)
ap_rprintf(r, "CPULoad: %g\n",
(tu + ts + tcu + tcs) / tick / up_time * 100.);