You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2005/02/06 11:35:55 UTC

cvs commit: jakarta-tomcat-connectors/jk/native/common jk_shm.c jk_shm.h

mturk       2005/02/06 02:35:55

  Modified:    jk/native/common jk_shm.c jk_shm.h
  Log:
  Change shm API to use predefined shm struct since this one is
  always seerver global singleton.
  
  Revision  Changes    Path
  1.3       +37 -26    jakarta-tomcat-connectors/jk/native/common/jk_shm.c
  
  Index: jk_shm.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_shm.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- jk_shm.c	6 Feb 2005 10:00:41 -0000	1.2
  +++ jk_shm.c	6 Feb 2005 10:35:55 -0000	1.3
  @@ -31,20 +31,27 @@
   static jk_shm_t *jk_global_shm = NULL;
   
   /* Use plain memory */
  -jk_shm_t *jk_shm_open(const char *fname, int workers, int dynamic, jk_pool_t *p)
  +int jk_shm_open(const char *fname, int workers, int dynamic, jk_shm_t *shm)
   {
  -    jk_shm_t *shm;
       jk_shm_h_rec_t *hdr;
   
  -    if (jk_global_shm)
  -        return jk_global_shm;
  -    shm = jk_pool_alloc(p, sizeof(jk_shm_t));
  +    if (jk_global_shm) {
  +        shm->attached = jk_global_shm->attached;
  +        shm->size = jk_global_shm->size;
  +        shm->base = jk_global_shm->base;
  +        shm->filename = jk_global_shm->filename;
  +        return 0;
  +    }
  +    if (workers < 1 || workers > JK_SHM_MAX_WORKERS)
  +        workers = JK_SHM_MAX_WORKERS;
  +    if (dynamic < 1 || dynamic > JK_SHM_MAX_WORKERS)
  +        dynamic = JK_SHM_MAX_WORKERS;
   
       shm->size = sizeof(jk_shm_h_rec_t) + (workers + dynamic) * sizeof(jk_shm_w_rec_t);
   
       shm->base = calloc(1, shm->size);
       if (!shm->base)
  -        return NULL;
  +        return -1;
       shm->filename = fname;
       shm->fd = -1;
       shm->attached = 0;
  @@ -56,17 +63,17 @@
       hdr->dynamic = dynamic;
   
       jk_global_shm = shm;
  -    return shm;
  +    return 0;
   }
   
  -jk_shm_t *jk_shm_attach(const char *fname, int workers, int dynamic, jk_pool_t *p)
  +int jk_shm_attach(const char *fname, int workers, int dynamic, jk_shm_t *shm)
   {
  -    jk_shm_t *shm = jk_shm_open(fname, workers, dynamic, p);
  -
  -    if (shm) {
  +    if (!jk_shm_open(fname, workers, dynamic, shm)) {
           shm->attached = 1;
  +        return 0;
       }
  -    return shm;
  +    else
  +        return -1;
   }
   
   void jk_shm_close(jk_shm_t *shm)
  @@ -97,10 +104,9 @@
   #define MAP_FILE    (0)
   #endif
   
  -static jk_shm_t *do_shm_open(const char *fname, int workers, int dynamic,
  -                             jk_pool_t *p, int attached)
  +static int do_shm_open(const char *fname, int workers, int dynamic,
  +                       jk_shm_t *shm, int attached)
   {
  -    jk_shm_t *shm;
       int fd;
       int flags = O_RDWR;
   
  @@ -108,8 +114,13 @@
           flags |= (O_CREAT|O_TRUNC);
       fd = open(fname, flags, 0666);
       if (fd == -1)
  -        return NULL;
  -    shm = jk_pool_alloc(p, sizeof(jk_shm_t));
  +        return -1;
  +
  +    if (workers < 1 || workers > JK_SHM_MAX_WORKERS)
  +        workers = JK_SHM_MAX_WORKERS;
  +    if (dynamic < 1 || dynamic > JK_SHM_MAX_WORKERS)
  +        dynamic = JK_SHM_MAX_WORKERS;
  +
       shm->size = sizeof(jk_shm_h_rec_t) + (workers + dynamic) * sizeof(jk_shm_w_rec_t);
   
       if (!attached) {
  @@ -118,13 +129,13 @@
               size = shm->size;
               if (ftruncate(fd, shm->size)) {
                   close(fd);
  -                return NULL;
  +                return -1;
               }
           }
       }
       if (lseek(fd, 0, SEEK_SET) != 0) {
           close(fd);
  -        return NULL;
  +        return -1;
       }
   
       shm->base = mmap(NULL, shm->size,
  @@ -136,7 +147,7 @@
       }
       if (!shm->base) {
           close(fd);
  -        return NULL;
  +        return -1;
       }
       shm->filename = fname;
       shm->fd = fd;
  @@ -157,17 +168,17 @@
           /* TODO: check header magic */
       }
   
  -    return shm;
  +    return 0;
   }
   
  -jk_shm_t *jk_shm_open(const char *fname, int workers, int dynamic, jk_pool_t *p)
  +int jk_shm_open(const char *fname, int workers, int dynamic, jk_shm_t *shm)
   {
  -    return do_shm_open(fname, workers, dynamic, p, 0);
  +    return do_shm_open(fname, workers, dynamic, shm, 0);
   }
   
  -jk_shm_t *jk_shm_attach(const char *fname, int workers, int dynamic, jk_pool_t *p)
  +int jk_shm_attach(const char *fname, int workers, int dynamic, jk_shm_t *shm)
   {
  -    return do_shm_open(fname, workers, dynamic, p, 1);
  +    return do_shm_open(fname, workers, dynamic, shm, 1);
   }
   
   void jk_shm_close(jk_shm_t *shm)
  
  
  
  1.2       +7 -3      jakarta-tomcat-connectors/jk/native/common/jk_shm.h
  
  Index: jk_shm.h
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_shm.h,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- jk_shm.h	5 Feb 2005 19:40:19 -0000	1.1
  +++ jk_shm.h	6 Feb 2005 10:35:55 -0000	1.2
  @@ -42,6 +42,10 @@
   #define JK_SHM_DYNAMIC  16
   #define JK_SHM_MAGIC    '!', 'J', 'K', 'S', 'H', 'M', JK_SHM_MAJOR, JK_SHM_MINOR
   
  +/* Really huge numbers, but 1024 workers should be enough */
  +#define JK_SHM_MAX_WORKERS  768
  +#define JK_SHM_MAX_DYNAMIC  256
  +
   /** jk shm structure */
   struct jk_shm
   {
  @@ -128,7 +132,7 @@
   
   /* Open the shared memory creating file if needed
    */
  -jk_shm_t *jk_shm_open(const char *fname, int workers, int dynamic, jk_pool_t *p);
  +int jk_shm_open(const char *fname, int workers, int dynamic, jk_shm_t *shm);
   
   /* Close the shared memory
    */
  @@ -137,7 +141,7 @@
   /* Attach the shared memory in child process.
    * File has to be opened in parent.
    */
  -jk_shm_t *jk_shm_attach(const char *fname, int workers, int dynamic, jk_pool_t *p);
  +int jk_shm_attach(const char *fname, int workers, int dynamic, jk_shm_t *shm);
   
   
   /* Return shm header record
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org