dgaudet 98/03/26 13:20:53
Modified: src CHANGES
src/include scoreboard.h
src/main http_core.c http_main.c
src/modules/standard mod_status.c
Log:
a few changes to scoreboard definitions to generate better code
Revision Changes Path
1.737 +3 -0 apache-1.3/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
retrieving revision 1.736
retrieving revision 1.737
diff -u -r1.736 -r1.737
--- CHANGES 1998/03/26 21:17:37 1.736
+++ CHANGES 1998/03/26 21:20:46 1.737
@@ -1,5 +1,8 @@
Changes with Apache 1.3b6
+ *) A few changes to scoreboard definitions which helps gcc generate
+ better code. [Dean Gaudet]
+
*) ANSI C doesn't guarantee that "int foo : 2" in a structure will
be a signed bitfield. So mark a few bitfields as signed to
ensure correct code. [Dean Gaudet]
1.37 +4 -5 apache-1.3/src/include/scoreboard.h
Index: scoreboard.h
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/include/scoreboard.h,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- scoreboard.h 1998/01/21 19:17:44 1.36
+++ scoreboard.h 1998/03/26 21:20:48 1.37
@@ -68,11 +68,10 @@
* Status values:
*/
-#define SERVER_UNKNOWN (-1) /* should never be in this state */
#define SERVER_DEAD 0
-#define SERVER_READY 1 /* Waiting for connection (or accept()
lock) */
-#define SERVER_STARTING 3 /* Server Starting up */
-#define SERVER_BUSY_READ 2 /* Reading a client request */
+#define SERVER_STARTING 1 /* Server Starting up */
+#define SERVER_READY 2 /* Waiting for connection (or accept()
lock) */
+#define SERVER_BUSY_READ 3 /* Reading a client request */
#define SERVER_BUSY_WRITE 4 /* Processing a client request */
#define SERVER_BUSY_KEEPALIVE 5 /* Waiting for more requests via
keepalive */
#define SERVER_BUSY_LOG 6 /* Logging the request */
@@ -101,7 +100,7 @@
vtime_t cur_vtime; /* the child's current vtime */
unsigned short timeout_len; /* length of the timeout */
#endif
- signed char status;
+ unsigned char status;
#if defined(STATUS)
unsigned long access_count;
unsigned long bytes_served;
1.177 +2 -2 apache-1.3/src/main/http_core.c
Index: http_core.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/main/http_core.c,v
retrieving revision 1.176
retrieving revision 1.177
diff -u -r1.176 -r1.177
--- http_core.c 1998/03/26 21:08:37 1.176
+++ http_core.c 1998/03/26 21:20:49 1.177
@@ -495,7 +495,7 @@
struct hostent *hptr;
int hostname_lookups;
#ifdef STATUS
- int old_stat = SERVER_UNKNOWN;
+ int old_stat = SERVER_DEAD; /* we shouldn't ever be in this state */
#endif
/* If we haven't checked the host name, and we want to */
@@ -542,7 +542,7 @@
}
}
#ifdef STATUS
- if (old_stat != SERVER_UNKNOWN) {
+ if (old_stat != SERVER_DEAD) {
(void)update_child_status(conn->child_num,old_stat,(request_rec*)NULL);
}
#endif /* STATUS */
1.313 +22 -20 apache-1.3/src/main/http_main.c
Index: http_main.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/main/http_main.c,v
retrieving revision 1.312
retrieving revision 1.313
diff -u -r1.312 -r1.313
--- http_main.c 1998/03/26 19:03:02 1.312
+++ http_main.c 1998/03/26 21:20:50 1.313
@@ -3581,35 +3581,37 @@
sync_scoreboard_image();
for (i = 0; i < daemons_limit; ++i) {
+ int status;
+
if (i >= max_daemons_limit && free_length == idle_spawn_rate)
break;
ss = &scoreboard_image->servers[i];
- switch (ss->status) {
- /* We consider a starting server as idle because we started it
- * at least a cycle ago, and if it still hasn't finished starting
- * then we're just going to swamp things worse by forking more.
- * So we hopefully won't need to fork more if we count it.
- */
- case SERVER_STARTING:
- case SERVER_READY:
- ++ idle_count;
- /* always kill the highest numbered child if we have to...
- * no really well thought out reason ... other than observing
- * the server behaviour under linux where lower numbered children
- * tend to service more hits (and hence are more likely to have
- * their data in cpu caches).
- */
- to_kill = i;
- break;
- case SERVER_DEAD:
+ status = ss->status;
+ if (status == SERVER_DEAD) {
/* try to keep children numbers as low as possible */
if (free_length < idle_spawn_rate) {
free_slots[free_length] = i;
++free_length;
}
- break;
}
- if (ss->status != SERVER_DEAD) {
+ else {
+ /* We consider a starting server as idle because we started it
+ * at least a cycle ago, and if it still hasn't finished starting
+ * then we're just going to swamp things worse by forking more.
+ * So we hopefully won't need to fork more if we count it.
+ * This depends on the ordering of SERVER_READY and SERVER_STARTING.
+ */
+ if (status <= SERVER_READY) {
+ ++ idle_count;
+ /* always kill the highest numbered child if we have to...
+ * no really well thought out reason ... other than observing
+ * the server behaviour under linux where lower numbered
children
+ * tend to service more hits (and hence are more likely to have
+ * their data in cpu caches).
+ */
+ to_kill = i;
+ }
+
++total_non_dead;
last_non_dead = i;
#ifdef OPTIMIZE_TIMEOUTS
1.82 +2 -2 apache-1.3/src/modules/standard/mod_status.c
Index: mod_status.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/modules/standard/mod_status.c,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -r1.81 -r1.82
--- mod_status.c 1998/03/16 16:44:27 1.81
+++ mod_status.c 1998/03/26 21:20:52 1.82
@@ -290,10 +290,10 @@
score_record = scoreboard_image->servers[i];
ps_record = scoreboard_image->parent[i];
res = score_record.status;
- stat_buffer[i] = (res == SERVER_UNKNOWN) ? '?' : status_flags[res];
+ stat_buffer[i] = status_flags[res];
if (res == SERVER_READY)
ready++;
- else if (res != SERVER_DEAD && res != SERVER_UNKNOWN)
+ else if (res != SERVER_DEAD)
busy++;
#if defined(STATUS)
lres = score_record.access_count;