PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- * mod_slotmem_shm: Use ap_runtime_dir_relative(). (Assumes r1297560)
- Trunk patch: http://svn.apache.org/viewvc?rev=1298433&view=rev
- 2.4.x patch: Trunk patch works (skip docs/log-message-tags/next-number)
- +1: jim, minfrin (with docs at http://svn.apache.org/viewvc?rev=1305166&view=rev)
- +1: igalic
-
PATCHES PROPOSED TO BACKPORT FROM TRUNK:
[ New proposals should be added at the end of the list ]
restart, whether graceful or not. The data itself is
stored and restored within a file noted by the <code>name</code>
parameter in the <code>create</code> and <code>attach</code>
- calls.
+ calls. If not specified with an absolute path, the file will be
+ created relative to the path specified by the
+ <directive module="core">DefaultRuntimeDir</directive> directive.
</p>
<p><code>mod_slotmem_shm</code> provides the following API functions:
<dt><code>"none"</code></dt>
<dd><code>Does not persist shared memory in file.</code></dd>
<dt><code>"file-name"</code></dt>
- <dd><code>$server_root/file-name</code></dd>
+ <dd><code>[DefaultRuntimeDir]/file-name</code></dd>
<dt><code>"/absolute-file-name"</code></dt>
- <dd><code>$absolute-file-name</code></dd>
+ <dd><code>Absolute file name</code></dd>
</dl></dd>
<dt>apr_status_t attach(ap_slotmem_instance_t **new, const char *name, apr_size_t *item_size, unsigned int *item_num, apr_pool_t *pool)</dt>
struct ap_slotmem_instance_t *next; /* location of next allocated segment */
};
-
/*
* Memory layout:
* sharedslotdesc_t | num_free | slots | isuse array |
static struct ap_slotmem_instance_t *globallistmem = NULL;
static apr_pool_t *gpool = NULL;
+#define DEFAULT_SLOTMEM_PREFIX "slotmem-shm-"
+#define DEFAULT_SLOTMEM_SUFFIX ".shm"
+
/* apr:shmem/unix/shm.c */
static apr_status_t unixd_set_shm_perms(const char *fname)
{
*
*/
-#define DEFAULT_SLOTMEM_PREFIX DEFAULT_REL_RUNTIMEDIR "/slotmem-shm-"
-
-#define DEFAULT_SLOTMEM_SUFFIX ".shm"
-
static const char *slotmem_filename(apr_pool_t *pool, const char *slotmemname)
{
const char *fname;
return NULL;
}
else if (slotmemname[0] != '/') {
- const char *path = apr_pstrcat(pool, DEFAULT_SLOTMEM_PREFIX, slotmemname,
- DEFAULT_SLOTMEM_SUFFIX, NULL);
- fname = ap_server_root_relative(pool, path);
+ const char *filenm = apr_pstrcat(pool, DEFAULT_SLOTMEM_PREFIX,
+ slotmemname, DEFAULT_SLOTMEM_SUFFIX, NULL);
+ fname = ap_runtime_dir_relative(pool, filenm);
}
else {
fname = slotmemname;
}
/* first try to attach to existing shared memory */
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf, APLOGNO(02300)
+ "create %s: %"APR_SIZE_T_FMT"/%u", fname, item_size,
+ item_num);
if (fbased) {
rv = apr_shm_attach(&shm, fname, gpool);
}
return APR_ENOSHMAVAIL;
}
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf, APLOGNO(02301)
+ "attach looking for %s", fname);
+
/* first try to attach to existing slotmem */
if (next) {
for (;;) {
*new = next;
*item_size = next->desc.size;
*item_num = next->desc.num;
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
+ APLOGNO(02302)
+ "attach found %s: %"APR_SIZE_T_FMT"/%u", fname,
+ *item_size, *item_num);
return APR_SUCCESS;
}
if (!next->next) {
}
}
- /* first try to attach to existing shared memory */
+ /* next try to attach to existing shared memory */
rv = apr_shm_attach(&shm, fname, gpool);
if (rv != APR_SUCCESS) {
return rv;
*new = res;
*item_size = desc.size;
*item_num = desc.num;
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf,
+ APLOGNO(02303)
+ "attach found %s: %"APR_SIZE_T_FMT"/%u", fname,
+ *item_size, *item_num);
return APR_SUCCESS;
}