You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2011/04/01 21:25:19 UTC

svn commit: r1087862 - /httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c

Author: jim
Date: Fri Apr  1 19:25:19 2011
New Revision: 1087862

URL: http://svn.apache.org/viewvc?rev=1087862&view=rev
Log:
More cleanups at cleanup... move to using pconf and then remove
any file-based shms

Modified:
    httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c

Modified: httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c?rev=1087862&r1=1087861&r2=1087862&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c (original)
+++ httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c Fri Apr  1 19:25:19 2011
@@ -57,6 +57,7 @@ typedef struct {
 
 struct ap_slotmem_instance_t {
     char                 *name;       /* per segment name */
+    int                  fbased;      /* filebased? */
     void                 *shm;        /* ptr to memory segment (apr_shm_t *) */
     void                 *base;       /* data set start */
     apr_pool_t           *gpool;      /* per segment global pool */
@@ -211,12 +212,15 @@ static apr_status_t cleanup_slotmem(void
             if (AP_SLOTMEM_IS_PERSIST(next)) {
                 store_slotmem(next);
             }
+            if (next->fbased) {
+                apr_shm_remove(next->name, next->gpool);
+            }
             apr_shm_destroy((apr_shm_t *)next->shm);
             next = next->next;
         }
     }
-    apr_pool_destroy(gpool);
-    gpool = NULL;
+    /* apr_pool_destroy(gpool); */
+    globallistmem = NULL;
     return APR_SUCCESS;
 }
 
@@ -253,6 +257,7 @@ static apr_status_t slotmem_create(ap_sl
                                    ap_slotmem_type_t type, apr_pool_t *pool)
 {
 /*    void *slotmem = NULL; */
+    int fbased;
     char *ptr;
     sharedslotdesc_t desc;
     ap_slotmem_instance_t *res;
@@ -294,7 +299,8 @@ static apr_status_t slotmem_create(ap_sl
     }
 
     /* first try to attach to existing shared memory */
-    if (name && name[0] != ':') {
+    fbased = (name && name[0] != ':');
+    if (fbased) {
         rv = apr_shm_attach(&shm, fname, gpool);
     }
     else {
@@ -316,7 +322,7 @@ static apr_status_t slotmem_create(ap_sl
     }
     else {
         apr_size_t dsize = size - AP_SLOTMEM_OFFSET;
-        if (name && name[0] != ':') {
+        if (fbased) {
             apr_shm_remove(fname, gpool);
             rv = apr_shm_create(&shm, size, fname, gpool);
         }
@@ -326,7 +332,7 @@ static apr_status_t slotmem_create(ap_sl
         if (rv != APR_SUCCESS) {
             return rv;
         }
-        if (name && name[0] != ':') {
+        if (fbased) {
             /* Set permissions to shared memory
              * so it can be attached by child process
              * having different user credentials
@@ -355,6 +361,7 @@ static apr_status_t slotmem_create(ap_sl
     res = (ap_slotmem_instance_t *) apr_pcalloc(gpool,
                                                 sizeof(ap_slotmem_instance_t));
     res->name = apr_pstrdup(gpool, fname);
+    res->fbased = fbased;
     res->shm = shm;
     res->num_free = (unsigned int *)ptr;
     *res->num_free = item_num;
@@ -436,6 +443,7 @@ static apr_status_t slotmem_attach(ap_sl
     res = (ap_slotmem_instance_t *) apr_pcalloc(gpool,
                                                 sizeof(ap_slotmem_instance_t));
     res->name = apr_pstrdup(gpool, fname);
+    res->fbased = 1;
     res->shm = shm;
     res->num_free = (unsigned int *)ptr;
     res->persist = (void *)ptr;
@@ -619,9 +627,7 @@ static const ap_slotmem_provider_t *slot
 /* initialise the global pool */
 static void slotmem_shm_initgpool(apr_pool_t *p)
 {
-    if (!gpool && p) {
-        gpool = p;
-    }
+    gpool = p;
 }
 
 /* Add the pool_clean routine */
@@ -647,8 +653,8 @@ static int pre_config(apr_pool_t *p, apr
     apr_pool_t *global_pool;
     apr_status_t rv;
 
-    rv = apr_pool_create(&global_pool, NULL);
-    if (rv != APR_SUCCESS) {
+    rv = apr_pool_create(&global_pool, p);
+    if (rv != APR_SUCCESS || !global_pool) {
         ap_log_error(APLOG_MARK, APLOG_CRIT, rv, NULL,
             "Fatal error: unable to create global pool for shared slotmem");
         return rv;



Re: svn commit: r1087862 - /httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c

Posted by Jim Jagielski <ji...@apache.org>.
On Apr 3, 2011, at 9:36 AM, Ruediger Pluem wrote:

>> @@ -436,6 +443,7 @@ static apr_status_t slotmem_attach(ap_sl
>>     res = (ap_slotmem_instance_t *) apr_pcalloc(gpool,
>>                                                 sizeof(ap_slotmem_instance_t));
>>     res->name = apr_pstrdup(gpool, fname);
>> +    res->fbased = 1;
> 

Basically, fbased is simply a flag to determine whether or
not the apr_shm_create() used a real name or NULL. 


Re: svn commit: r1087862 - /httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c

Posted by Ruediger Pluem <rp...@apache.org>.

On 04/01/2011 09:25 PM, jim@apache.org wrote:
> Author: jim
> Date: Fri Apr  1 19:25:19 2011
> New Revision: 1087862
> 
> URL: http://svn.apache.org/viewvc?rev=1087862&view=rev
> Log:
> More cleanups at cleanup... move to using pconf and then remove
> any file-based shms
> 
> Modified:
>     httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c
> 
> Modified: httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c
> URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c?rev=1087862&r1=1087861&r2=1087862&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c (original)
> +++ httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c Fri Apr  1 19:25:19 2011
> @@ -57,6 +57,7 @@ typedef struct {
>  
>  struct ap_slotmem_instance_t {
>      char                 *name;       /* per segment name */
> +    int                  fbased;      /* filebased? */
>      void                 *shm;        /* ptr to memory segment (apr_shm_t *) */
>      void                 *base;       /* data set start */
>      apr_pool_t           *gpool;      /* per segment global pool */
> @@ -211,12 +212,15 @@ static apr_status_t cleanup_slotmem(void
>              if (AP_SLOTMEM_IS_PERSIST(next)) {
>                  store_slotmem(next);
>              }
> +            if (next->fbased) {
> +                apr_shm_remove(next->name, next->gpool);
> +            }

Why is this needed? Doesn't do apr_shm_destroy this automatically?

> @@ -436,6 +443,7 @@ static apr_status_t slotmem_attach(ap_sl
>      res = (ap_slotmem_instance_t *) apr_pcalloc(gpool,
>                                                  sizeof(ap_slotmem_instance_t));
>      res->name = apr_pstrdup(gpool, fname);
> +    res->fbased = 1;

Why is this always fbased?

Regards

RĂ¼diger