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 2010/09/27 19:37:34 UTC

svn commit: r1001831 - in /httpd/httpd/trunk: docs/manual/mod/mod_slotmem_shm.xml modules/slotmem/mod_slotmem_shm.c

Author: jim
Date: Mon Sep 27 17:37:33 2010
New Revision: 1001831

URL: http://svn.apache.org/viewvc?rev=1001831&view=rev
Log:
Allow for non-persist of shared mem

Modified:
    httpd/httpd/trunk/docs/manual/mod/mod_slotmem_shm.xml
    httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c

Modified: httpd/httpd/trunk/docs/manual/mod/mod_slotmem_shm.xml
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_slotmem_shm.xml?rev=1001831&r1=1001830&r2=1001831&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/mod/mod_slotmem_shm.xml (original)
+++ httpd/httpd/trunk/docs/manual/mod/mod_slotmem_shm.xml Mon Sep 27 17:37:33 2010
@@ -49,13 +49,15 @@
       <dd>call the callback on all worker slots</dd>
 
       <dt>apr_status_t create(ap_slotmem_instance_t **new, const char *name, apr_size_t item_size, unsigned int item_num, ap_slotmem_type_t type, apr_pool_t *pool)</dt>
-      <dd>create a new slotmem with each item size is item_size. <code>name</code> is the filename for the persistant store of
+      <dd>create a new slotmem with each item size is item_size. <code>name</code> is the filename for the persistent store of
       the shared memory. Values are:
        <dl>
-         <dt><code>anonymous</code></dt>
+         <dt><code>"none"</code></dt>
+         <dd><code>Does not persist shared memory in file.</code></dd>
+         <dt><code>"anonymous"</code></dt>
          <dd><code>$server_root/logs/anonymous.slotmem</code></dd>
-         <dt><code>:module_name.c</code></dt>
-         <dd><code>$server_root/logs/module_name.c.slotmem</code></dd>
+         <dt><code>":file-name"</code></dt>
+         <dd><code>$server_root/logs/file-name.slotmem</code></dd>
          <dt><code>"absolute-file-name"</code></dt>
          <dd><code>$absolute-file-name.slotmem</code></dd>
        </dl>

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=1001831&r1=1001830&r2=1001831&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c (original)
+++ httpd/httpd/trunk/modules/slotmem/mod_slotmem_shm.c Mon Sep 27 17:37:33 2010
@@ -106,10 +106,11 @@ static apr_status_t unixd_set_shm_perms(
 }
 
 /*
- * Persiste the slotmem in a file
+ * Persist the slotmem in a file
  * slotmem name and file name.
+ * none      : no persistent data
  * anonymous : $server_root/logs/anonymous.slotmem
- * :module.c : $server_root/logs/module.c.slotmem
+ * :rel_name : $server_root/logs/rel_name.slotmem
  * abs_name  : $abs_name.slotmem
  *
  */
@@ -117,7 +118,9 @@ static const char *store_filename(apr_po
 {
     const char *storename;
     const char *fname;
-    if (strcmp(slotmemname, "anonymous") == 0)
+    if (strcasecmp(slotmemname, "none") == 0)
+        return NULL;
+    else if (strcasecmp(slotmemname, "anonymous") == 0)
         fname = ap_server_root_relative(pool, "logs/anonymous");
     else if (slotmemname[0] == ':') {
         const char *tmpname;
@@ -140,20 +143,22 @@ static void store_slotmem(ap_slotmem_ins
 
     storename = store_filename(slotmem->gpool, slotmem->name);
 
-    rv = apr_file_open(&fp, storename, APR_CREATE | APR_READ | APR_WRITE,
-                       APR_OS_DEFAULT, slotmem->gpool);
-    if (APR_STATUS_IS_EEXIST(rv)) {
-        apr_file_remove(storename, slotmem->gpool);
+    if (storename) {
         rv = apr_file_open(&fp, storename, APR_CREATE | APR_READ | APR_WRITE,
                            APR_OS_DEFAULT, slotmem->gpool);
+        if (APR_STATUS_IS_EEXIST(rv)) {
+            apr_file_remove(storename, slotmem->gpool);
+            rv = apr_file_open(&fp, storename, APR_CREATE | APR_READ | APR_WRITE,
+                               APR_OS_DEFAULT, slotmem->gpool);
+        }
+        if (rv != APR_SUCCESS) {
+            return;
+        }
+        nbytes = (slotmem->desc.size * slotmem->desc.num) +
+                 (slotmem->desc.num * sizeof(char));
+        apr_file_write(fp, slotmem->base, &nbytes);
+        apr_file_close(fp);
     }
-    if (rv != APR_SUCCESS) {
-        return;
-    }
-    nbytes = (slotmem->desc.size * slotmem->desc.num) +
-             (slotmem->desc.num * sizeof(char));
-    apr_file_write(fp, slotmem->base, &nbytes);
-    apr_file_close(fp);
 }
 
 /* should be apr_status_t really */
@@ -166,21 +171,24 @@ static void restore_slotmem(void *ptr, c
     apr_status_t rv;
 
     storename = store_filename(pool, name);
-    rv = apr_file_open(&fp, storename, APR_READ | APR_WRITE, APR_OS_DEFAULT,
-                       pool);
-    if (rv == APR_SUCCESS) {
-        apr_finfo_t fi;
-        if (apr_file_info_get(&fi, APR_FINFO_SIZE, fp) == APR_SUCCESS) {
-            if (fi.size == nbytes) {
-                apr_file_read(fp, ptr, &nbytes);
-            }
-            else {
-                apr_file_close(fp);
-                apr_file_remove(storename, pool);
-                return;
+    
+    if (storename) {
+        rv = apr_file_open(&fp, storename, APR_READ | APR_WRITE, APR_OS_DEFAULT,
+                           pool);
+        if (rv == APR_SUCCESS) {
+            apr_finfo_t fi;
+            if (apr_file_info_get(&fi, APR_FINFO_SIZE, fp) == APR_SUCCESS) {
+                if (fi.size == nbytes) {
+                    apr_file_read(fp, ptr, &nbytes);
+                }
+                else {
+                    apr_file_close(fp);
+                    apr_file_remove(storename, pool);
+                    return;
+                }
             }
+            apr_file_close(fp);
         }
-        apr_file_close(fp);
     }
 }