manoj 99/06/30 12:01:10
Modified: . STATUS
pthreads/src/main http_accept.c
Log:
Blah. Since poll probably shouldn't be called from multiple threads on
the same pollfd strucuture at the same time, and also because restarts
will be hosed otherwise, disable support for
SINGLE_LISTEN_UNSERIALIZED_ACCEPT.
Revision Changes Path
1.28 +1 -7 apache-apr/STATUS
Index: STATUS
===================================================================
RCS file: /home/cvs/apache-apr/STATUS,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -u -r1.27 -r1.28
--- STATUS 1999/06/28 21:58:27 1.27
+++ STATUS 1999/06/30 19:01:01 1.28
@@ -1,5 +1,5 @@
Apache Portable Runtime STATUS:
-Last modified at [$Date: 1999/06/28 21:58:27 $]
+Last modified at [$Date: 1999/06/30 19:01:01 $]
Release:
@@ -42,12 +42,6 @@
Everything
Needs patch:
-
- If SINGLE_LISTEN_UNSERIALIZED_ACCEPT is active, multiple threads are
- allowes to call poll() at the same time, with the same pollfd array.
- The only solution Manoj can think of right now is to have one pollfd
- array per thread, or to just always require serialization (bleh on
- both counts).
With AIX 4.2, if MaxRequestsPerChild is low (e.g. 5) and
ThreadsPerChild is high (e.g. 64), the signal delivered to sigwait
1.20 +7 -16 apache-apr/pthreads/src/main/http_accept.c
Index: http_accept.c
===================================================================
RCS file: /home/cvs/apache-apr/pthreads/src/main/http_accept.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -u -r1.19 -r1.20
--- http_accept.c 1999/06/29 00:18:03 1.19
+++ http_accept.c 1999/06/30 19:01:06 1.20
@@ -74,13 +74,9 @@
#if defined (USE_ACCEPT_QUEUE)
-#ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-/* Each thread only listens to one socket in this model, so the starvation
- * problem described in manual/misc/perf-tuning.html can't occur here */
-#define SAFE_ACCEPT(stmt)
-#else
+/* In the current state of the server, It is never safe not to do accept
+ * serialization. Maybe we can change this. */
#define SAFE_ACCEPT(stmt) do {stmt;} while(0)
-#endif
/* The queue of sockets we've accepted */
static FDQueue csd_queue;
@@ -290,16 +286,15 @@
#elif defined(USE_MULTI_ACCEPT)
-#ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-#define SAFE_ACCEPT(stmt) do {if(ap_listeners->next != NULL) {stmt;}}
while(0)
-#else
-#define SAFE_ACCEPT(stmt) do {stmt;} while(0)
-#endif
-
/*
* USE_MULTI_ACCEPT
* Worker threads do the accept and process the request.
*/
+
+/* In the current state of the server, It is never safe not to do accept
+ * serialization. Maybe we can change this. */
+#define SAFE_ACCEPT(stmt) do {stmt;} while(0)
+
static struct pollfd *listenfds;
static int last_pollfd = 0; /* 0 = ap_pipe_of_death */
@@ -401,10 +396,6 @@
continue;
}
- /* This conditional is used because the single listen case is the
- * only one where the accept might not be serialized. In that
- * case, multiple threads mucking around with the listenfds array
- * and last_pollfd */
if (num_listenfds == 1) {
/* only one socket, just pretend we did the other stuff */
sd = ap_listeners->fd;