You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Dean Gaudet <dg...@arctic.org> on 1997/05/07 21:19:03 UTC
solaris 256 FILE * problem
Igor, can you give this patch below a try instead of yours? It should
cover more cases giving more descriptors. Thanks.
If this works we should put a note about it in the FAQ.
Dean
Index: alloc.c
===================================================================
RCS file: /export/home/cvs/apache/src/alloc.c,v
retrieving revision 1.27
diff -c -3 -r1.27 alloc.c
*** alloc.c 1997/04/24 23:35:18 1.27
--- alloc.c 1997/05/07 19:16:38
***************
*** 796,802 ****
block_alarms();
fd = open(name, flg, mode);
save_errno = errno;
! if (fd >= 0) note_cleanups_for_fd (a, fd);
unblock_alarms();
errno = save_errno;
return fd;
--- 796,805 ----
block_alarms();
fd = open(name, flg, mode);
save_errno = errno;
! if (fd >= 0) {
! fd = dup_fd_high(fd);
! note_cleanups_for_fd (a, fd);
! }
unblock_alarms();
errno = save_errno;
return fd;
Index: http_main.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_main.c,v
retrieving revision 1.142
diff -c -3 -r1.142 http_main.c
*** http_main.c 1997/04/29 02:39:01 1.142
--- http_main.c 1997/05/07 19:16:39
***************
*** 694,699 ****
--- 694,700 ----
fprintf(stderr, "httpd: Could not open /dev/zero\n");
exit(1);
}
+ fd = dup_fd_high(fd);
m = mmap((caddr_t)0, SCOREBOARD_SIZE,
PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (m == (caddr_t)-1)
***************
*** 1811,1816 ****
--- 1812,1818 ----
*/
signal (SIGUSR1, SIG_IGN);
+ csd = dup_fd_high(csd);
note_cleanups_for_fd(ptrans,csd);
/*
***************
*** 1979,1984 ****
--- 1981,1988 ----
server_conf);
exit(1);
}
+
+ s = dup_fd_high (s);
note_cleanups_for_fd(pconf, s); /* arrange to close on exec or restart */
Index: httpd.h
===================================================================
RCS file: /export/home/cvs/apache/src/httpd.h,v
retrieving revision 1.102
diff -c -3 -r1.102 httpd.h
*** httpd.h 1997/04/29 05:18:53 1.102
--- httpd.h 1997/05/07 19:16:39
***************
*** 710,712 ****
--- 710,714 ----
unsigned long get_virthost_addr (const char *hostname, unsigned short *port);
extern time_t restart_time;
+
+ int dup_fd_high(int);
Index: util.c
===================================================================
RCS file: /export/home/cvs/apache/src/util.c,v
retrieving revision 1.52
diff -c -3 -r1.52 util.c
*** util.c 1997/04/12 04:24:59 1.52
--- util.c 1997/05/07 19:16:39
***************
*** 1326,1328 ****
--- 1326,1350 ----
return (p);
}
#endif
+
+
+ /* Solaris 2.x has this wonderful problem where you can have 1024 descriptors
+ * but FILE * only supports 256. So for the various descriptors which we
+ * don't use FILE * for, try to get them above number 256 to save space for
+ * FILE *.
+ */
+ int dup_fd_high (int fd)
+ {
+ #ifdef SOLARIS2
+ int new_fd;
+
+ new_fd = fcntl (fd, F_DUPFD, 256);
+ if (new_fd == -1) {
+ return fd;
+ }
+ close (fd);
+ return new_fd;
+ #else
+ return fd;
+ #endif
+ }