You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Rodent of Unusual Size <Ke...@Golux.Com> on 1998/05/30 03:45:33 UTC
[PATCH] to fix UTS (PR#2320)
PR#2320 supplied a set of patches to fix 1.3b7 on UTS
(whatever that is). They didn't apply with total smoothness
against HEAD, so I've fixed the problems and re-generated
them.
I have not done anything with the F_NDELAY versus O_NDELAY
issue mentioned in PR#2313.
I've got to leave, so can someone verify that these don't
break any other platforms, at least not obviously? Yes, I
know it's a cop-out - but I really don't have time
to verify this.
#ken P-)}
Ken Coar <http://Web.Golux.Com/coar/>
Apache Group member <http://www.apache.org/>
"Apache Server for Dummies" <http://Web.Golux.Com/coar/ASFD/>
Index: src/CHANGES
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
retrieving revision 1.878
diff -u -r1.878 CHANGES
--- CHANGES 1998/05/29 20:45:53 1.878
+++ CHANGES 1998/05/30 01:27:50
@@ -1,5 +1,8 @@
Changes with Apache 1.3b8
+ *) PORT: Fix brokenness (i.e., make it work) on UTS 2.1.2.
+ [Dave Dykstra <dw...@bell-labs.com>, Ken Coar] PR#2320
+
*) Avoid problems with braindead Awks by additionally searching for gawk
and nawk in APACI's configure script.
[Dave Dykstra <dw...@bell-labs.com>, Ralf S. Engelschall] PR#2319
Index: src/Configure
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/Configure,v
retrieving revision 1.261
diff -u -r1.261 Configure
--- Configure 1998/05/12 12:13:50 1.261
+++ Configure 1998/05/30 01:27:51
@@ -620,8 +620,9 @@
;;
*-uts*)
OS='Amdahl UTS'
- CFLAGS="$CFLAGS -Xa -eft -DUTS21"
+ CFLAGS="$CFLAGS -Xa -eft -DUTS21 -DUSEBCOPY"
LIBS="$LIBS -lsocket -lbsd -la"
+ DEF_WANTHSREGEX=yes
;;
*-ultrix)
OS='ULTRIX'
Index: src/include/conf.h
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/include/conf.h,v
retrieving revision 1.212
diff -u -r1.212 conf.h
--- conf.h 1998/05/29 00:15:56 1.212
+++ conf.h 1998/05/30 01:27:52
@@ -567,13 +567,22 @@
#undef NO_KILLPG
#define NO_SETSID
#define NEED_WAITPID
-#define NO_OTHER_CHILD
#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2
#define HAVE_SYSLOG 1
+#define USE_LONGJMP
+#define JMP_BUF jmp_buf
+#define NO_USE_SIGACTION
+#define NEED_STRERROR
+#define NEED_STRSTR
+#define NEED_POUND_BANG
+#define NEED_UNION_WAIT
+#define NDELAYPIPERETURNSZERO
+#define NO_DATA NO_ADDRESS
#define strftime(buf,bufsize,fmt,tm) ascftime(buf,fmt,tm)
#include <sys/types.h>
+#include <sys/time.h>
#elif defined(APOLLO)
#undef HAVE_GMTOFF
Index: src/main/http_main.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/main/http_main.c,v
retrieving revision 1.357
diff -u -r1.357 http_main.c
--- http_main.c 1998/05/29 08:18:49 1.357
+++ http_main.c 1998/05/30 01:27:57
@@ -2213,7 +2213,17 @@
}
if (ret > 0) {
return ret;
+#ifdef NEED_WAITPID
+ if ((ret = reap_children(status)) > 0) {
+ return ret;
}
+#endif
+ }
+#ifdef NEED_WAITPID
+ if ((ret = reap_children(status)) > 0) {
+ return ret;
+ }
+#endif
tv.tv_sec = SCOREBOARD_MAINTENANCE_INTERVAL / 1000000;
tv.tv_usec = SCOREBOARD_MAINTENANCE_INTERVAL % 1000000;
ap_select(0, NULL, NULL, NULL, &tv);
Index: src/main/http_protocol.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/main/http_protocol.c,v
retrieving revision 1.217
diff -u -r1.217 http_protocol.c
--- http_protocol.c 1998/05/27 22:55:59 1.217
+++ http_protocol.c 1998/05/30 01:27:59
@@ -1721,6 +1721,15 @@
FD_ZERO(&fds);
while (!r->connection->aborted) {
+#ifdef NDELAYPIPERETURNSZERO
+ /* Contributed by dwd@bell-labs.com for UTS 2.1.2, where the fcntl */
+ /* O_NDELAY flag causes read to return 0 when there's nothing */
+ /* available when reading from a pipe. That makes it tricky */
+ /* to detect end-of-file :-(. This stupid bug is even documented */
+ /* in the read(2) man page where it says that everything but */
+ /* pipes return -1 and EAGAIN. That makes it a feature, right? */
+ int afterselect = 0;
+#endif
if ((length > 0) && (total_bytes_sent + IOBUFSIZE) > length)
len = length - total_bytes_sent;
else
@@ -1728,8 +1737,15 @@
do {
n = ap_bread(fb, buf, len);
- if (n >= 0 || r->connection->aborted)
+#ifdef NDELAYPIPERETURNSZERO
+ if ((n > 0) || (n == 0 && afterselect))
+ break;
+#else
+ if (n >= 0)
break;
+#endif
+ if (r->connection->aborted)
+ break;
if (n < 0 && errno != EAGAIN)
break;
/* we need to block, so flush the output first */
@@ -1742,6 +1758,9 @@
* around and try another read
*/
ap_select(fd + 1, &fds, NULL, NULL, NULL);
+#ifdef NDELAYPIPERETURNSZERO
+ afterselect = 1;
+#endif
} while (!r->connection->aborted);
if (n < 1 || r->connection->aborted) {
Index: src/main/util.c
===================================================================
RCS file: /export/home/cvs/apache-1.3/src/main/util.c,v
retrieving revision 1.117
diff -u -r1.117 util.c
--- util.c 1998/05/28 19:57:11 1.117
+++ util.c 1998/05/30 01:28:01
@@ -1393,7 +1393,35 @@
}
#endif
-
+/* The following routine was donated for UTS21 by dwd@bell-labs.com */
+#ifdef NEED_STRSTR
+char *strstr(char *s1, char *s2)
+{
+ char *p1, *p2;
+ if (*s2 == '\0') {
+ /* an empty s2 */
+ return(s1);
+ }
+ while((s1 = strchr(s1, *s2)) != NULL) {
+ /* found first character of s2, see if the rest matches */
+ p1 = s1;
+ p2 = s2;
+ while (*++p1 == *++p2) {
+ if (*p1 == '\0') {
+ /* both strings ended together */
+ return(s1);
+ }
+ }
+ if (*p2 == '\0') {
+ /* second string ended, a match */
+ break;
+ }
+ /* didn't find a match here, try starting at next character in s1 */
+ s1++;
+ }
+ return(s1);
+}
+#endif
#ifdef NEED_INITGROUPS
int initgroups(const char *name, gid_t basegid)
@@ -1429,7 +1457,8 @@
#ifdef NEED_WAITPID
/* From ikluft@amdahl.com
* this is not ideal but it works for SVR3 variants
- * httpd does not use the options so this doesn't implement them
+ * Modified by dwd@bell-labs.com to call wait3 instead of wait because
+ * apache started to use the WNOHANG option.
*/
int waitpid(pid_t pid, int *statusp, int options)
{
@@ -1438,7 +1467,9 @@
errno = ECHILD;
return -1;
}
- while (((tmp_pid = wait(statusp)) != pid) && (tmp_pid != -1));
+ while (((tmp_pid = wait3(statusp, options, 0)) != pid) &&
+ (tmp_pid != -1) && (tmp_pid != 0) && (pid != -1))
+ ;
return tmp_pid;
}
#endif
Re: [PATCH] to fix UTS (PR#2320)
Posted by Rodent of Unusual Size <Ke...@Golux.Com>.
Never mind, there are some problems with this patch. I'll
fix 'em and try to get 'em ready before 1.3.0..
#ken P-)}
Ken Coar <http://Web.Golux.Com/coar/>
Apache Group member <http://www.apache.org/>
"Apache Server for Dummies" <http://Web.Golux.Com/coar/ASFD/>