You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Dean Gaudet <dg...@hyperreal.org> on 1997/07/24 06:35:52 UTC

cvs commit: apache/src CHANGES Configure conf.h http_main.c

dgaudet     97/07/23 21:35:51

  Modified:    src       CHANGES Configure conf.h http_main.c
  Log:
  QNX mmap() support.
  
  Submitted by:	Igor N Kovalenko <in...@mail.wplus.net>
  Reviewed by:	Dean Gaudet
  PR:		683
  
  Revision  Changes    Path
  1.363     +3 -0      apache/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache/src/CHANGES,v
  retrieving revision 1.362
  retrieving revision 1.363
  diff -u -r1.362 -r1.363
  --- CHANGES	1997/07/24 04:32:27	1.362
  +++ CHANGES	1997/07/24 04:35:43	1.363
  @@ -1,5 +1,8 @@
   Changes with Apache 1.3a2
   
  +  *) PORT: QNX mmap() support for faster/more reliable scoreboard handling.
  +     [Igor N Kovalenko <in...@mail.wplus.net>] PR#683
  +
     *) child_main avoids an uneeded call to select() when there is only one
        listening socket.  [Dean Gaudet]
   
  
  
  
  1.120     +2 -2      apache/src/Configure
  
  Index: Configure
  ===================================================================
  RCS file: /export/home/cvs/apache/src/Configure,v
  retrieving revision 1.119
  retrieving revision 1.120
  diff -u -r1.119 -r1.120
  --- Configure	1997/07/21 23:09:30	1.119
  +++ Configure	1997/07/24 04:35:45	1.120
  @@ -357,13 +357,13 @@
       *-qnx)
   	OS='QNX'
   	CFLAGS="$CFLAGS -DQNX"
  -	LIBS="$LIBS -N128k -lsocket"
  +	LIBS="$LIBS -N128k -lsocket -lunix"
   	DEF_WANTHSREGEX=yes
   	;;
       *-qnx32)
   	OS='QNX32'
   	CFLAGS="$CFLAGS -DQNX -mf -3"
  -	LIBS="$LIBS -N128k -lsocket"
  +	LIBS="$LIBS -N128k -lsocket -lunix"
   	DEF_WANTHSREGEX=yes
   	;;
       *-isc4*)
  
  
  
  1.117     +1 -0      apache/src/conf.h
  
  Index: conf.h
  ===================================================================
  RCS file: /export/home/cvs/apache/src/conf.h,v
  retrieving revision 1.116
  retrieving revision 1.117
  diff -u -r1.116 -r1.117
  --- conf.h	1997/07/21 03:37:48	1.116
  +++ conf.h	1997/07/24 04:35:46	1.117
  @@ -442,6 +442,7 @@
   #define HAVE_SYS_SELECT_H
   #include <unix.h>
   #define JMP_BUF sigjmp_buf
  +#define HAVE_MMAP
   
   #elif defined(LYNXOS)
   #undef NO_KILLPG
  
  
  
  1.187     +51 -0     apache/src/http_main.c
  
  Index: http_main.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_main.c,v
  retrieving revision 1.186
  retrieving revision 1.187
  diff -u -r1.186 -r1.187
  --- http_main.c	1997/07/24 04:32:28	1.186
  +++ http_main.c	1997/07/24 04:35:47	1.187
  @@ -804,6 +804,55 @@
          fprintf(stderr, "httpd: Could not uopen() newly created OS/2 Shared memory pool.\n");
       }
   
  +#elif defined(QNX)
  +/* 
  + * POSIX 1003.4 style
  + *
  + * Note 1: 
  + * As of version 4.23A, shared memory in QNX must reside under /dev/shmem,
  + * where no subdirectories allowed.
  + *
  + * POSIX shm_open() and shm_unlink() will take care about this issue,
  + * but to avoid confusion, I suggest to redefine scoreboard file name
  + * in httpd.conf to cut "logs/" from it. With default setup actual name
  + * will be "/dev/shmem/logs.apache_status". 
  + * 
  + * If something went wrong and Apache did not unlinked this object upon
  + * exit, you can remove it manually, using "rm -f" command.
  + * 
  + * Note 2:
  + * <sys/mman.h> in QNX defines MAP_ANON, but current implementation 
  + * does NOT support BSD style anonymous mapping. So, the order of 
  + * conditional compilation is important: 
  + * this #ifdef section must be ABOVE the next one (BSD style).
  + *
  + * I tested this stuff and it works fine for me, but if it provides 
  + * trouble for you, just comment out HAVE_MMAP in QNX section of conf.h
  + *
  + * June 5, 1997, 
  + * Igor N. Kovalenko -- infoh@mail.wplus.net
  + */
  +    int fd;
  +
  +    fd = shm_open (scoreboard_fname, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
  +    if (fd == -1) {
  +	perror("httpd: could not open(create) scoreboard");
  +	exit(1);
  +    }
  +    if (ltrunc(fd, (off_t)SCOREBOARD_SIZE, SEEK_SET) == -1) {
  +	perror("httpd: could not ltrunc scoreboard");
  +	shm_unlink(scoreboard_fname);
  +	exit(1);
  +    }
  +    if ((m = (caddr_t)mmap((caddr_t)0,
  +		(size_t)SCOREBOARD_SIZE, PROT_READ|PROT_WRITE,
  +		MAP_SHARED, fd, (off_t)0)) == (caddr_t)-1) {
  +	perror("httpd: cannot mmap scoreboard");
  +	shm_unlink(scoreboard_fname);
  +	exit(1);
  +    }
  +    close(fd);
  +
   #elif defined(MAP_ANON) || defined(MAP_FILE)
   /* BSD style */
       m = mmap((caddr_t)0, SCOREBOARD_SIZE,
  @@ -1043,6 +1092,8 @@
   {
   #ifdef SCOREBOARD_FILE
       unlink (scoreboard_fname);
  +#elif defined(QNX) && defined(HAVE_MMAP)
  +    shm_unlink(scoreboard_fname);
   #endif
   }