On 04 Dec 2011, at 5:01 PM, Jim Jagielski wrote:
> As you likely know, the origins of slotmem grew out of the
> httpd-proxy-scoreboard
> branch (~5.5 years ago) and I assume jfclere had reasons for his choice
> for how to setup naming of paths, etc... But that is water under the
> bridge; if we wish to fix that then instead of throwing insults hither and
> yon, a really good idea would be to make the suggestion that it be
> fixed based on history/consistency/etc...
>
> I see that Graham has suggested a course of action, and I +1'ed
> it; if Graham lacks the time, I will find some cycles to address
> and implement.
I currently have this, which compiles but still needs to be tested. Busy this
afternoon, so if someone can take a look and see whether this works it would
help me. store_filename() seems sane, but the "look up existing segment" stuff
needs to be checked that it matches correctly.
Index: modules/slotmem/mod_slotmem_shm.c
===================================================================
--- modules/slotmem/mod_slotmem_shm.c (revision 1210009)
+++ modules/slotmem/mod_slotmem_shm.c (working copy)
@@ -119,29 +119,24 @@
* Persist the slotmem in a file
* slotmem name and file name.
* none : no persistent data
- * anonymous : $server_root/logs/anonymous.slotmem
- * :rel_name : $server_root/logs/rel_name.slotmem
- * abs_name : $abs_name.slotmem
+ * rel_name : $server_root/rel_name
+ * /abs_name : $abs_name
*
*/
static const char *store_filename(apr_pool_t *pool, const char *slotmemname)
{
const char *storename;
const char *fname;
- if (strcasecmp(slotmemname, "none") == 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;
- tmpname = apr_pstrcat(pool, "logs/", &slotmemname[1], NULL);
- fname = ap_server_root_relative(pool, tmpname);
}
+ else if (slotmemname[0] != '/') {
+ fname = ap_server_root_relative(pool, slotmemname);
+ }
else {
fname = slotmemname;
}
- storename = apr_pstrcat(pool, fname, ".slotmem", NULL);
- return storename;
+ return fname;
}
static void store_slotmem(ap_slotmem_instance_t *slotmem)
@@ -269,14 +264,15 @@
(item_num * sizeof(char)) + basesize;
apr_status_t rv;
- if (gpool == NULL)
+ if (gpool == NULL) {
return APR_ENOSHMAVAIL;
+ }
if (name) {
- if (name[0] == ':') {
- fname = name;
+ if (name[0] != '/') {
+ fname = ap_server_root_relative(pool, name);
}
else {
- fname = ap_server_root_relative(pool, name);
+ fname = name;
}
/* first try to attach to existing slotmem */
@@ -295,11 +291,11 @@
}
}
else {
- fname = "anonymous";
+ fname = "none";
}
/* first try to attach to existing shared memory */
- fbased = (name && name[0] != ':');
+ fbased = (name != NULL);
if (fbased) {
rv = apr_shm_attach(&shm, fname, gpool);
}
Regards,
Graham
--