PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- * mod_slotmem_shm: Add debugging output during persist
- trunk patch: http://svn.apache.org/viewvc?view=revision&revision=1386726
- 2.4.x patch: trunk patch works (minus next-number)
- +1: jim, rjung, trawick
-
- * mod_slotmem_shm: Fix handling of persist shm data file naming
- trunk patch: http://svn.apache.org/viewvc?view=revision&revision=1387085
- 2.4.x patch: trunk patch works
- +1: jim, rjung, trawick
PATCHES PROPOSED TO BACKPORT FROM TRUNK:
[ New proposals should be added at the end of the list ]
#define DEFAULT_SLOTMEM_PREFIX "slotmem-shm-"
#define DEFAULT_SLOTMEM_SUFFIX ".shm"
+#define DEFAULT_SLOTMEM_PERSIST_SUFFIX ".persist"
/* apr:shmem/unix/shm.c */
static apr_status_t unixd_set_shm_perms(const char *fname)
*
*/
-static const char *slotmem_filename(apr_pool_t *pool, const char *slotmemname)
+static const char *slotmem_filename(apr_pool_t *pool, const char *slotmemname,
+ int persist)
{
const char *fname;
if (!slotmemname || strcasecmp(slotmemname, "none") == 0) {
}
else if (slotmemname[0] != '/') {
const char *filenm = apr_pstrcat(pool, DEFAULT_SLOTMEM_PREFIX,
- slotmemname, DEFAULT_SLOTMEM_SUFFIX, NULL);
+ slotmemname, DEFAULT_SLOTMEM_SUFFIX,
+ NULL);
fname = ap_runtime_dir_relative(pool, filenm);
}
else {
fname = slotmemname;
}
+
+ if (persist) {
+ return apr_pstrcat(pool, fname, DEFAULT_SLOTMEM_PERSIST_SUFFIX,
+ NULL);
+ }
return fname;
}
}
}
+static const char *storemem_filename(apr_pool_t *pool, const char *name)
+{
+ return apr_pstrcat(pool, name, ".persist", NULL);
+}
+
static void store_slotmem(ap_slotmem_instance_t *slotmem)
{
apr_file_t *fp;
apr_size_t nbytes;
const char *storename;
- storename = slotmem_filename(slotmem->gpool, slotmem->name);
+ storename = slotmem_filename(slotmem->gpool, slotmem->name, 1);
+
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf, APLOGNO(02334)
+ "storing %s", storename);
if (storename) {
rv = apr_file_open(&fp, storename, APR_CREATE | APR_READ | APR_WRITE,
}
nbytes = (slotmem->desc.size * slotmem->desc.num) +
(slotmem->desc.num * sizeof(char)) + AP_UNSIGNEDINT_OFFSET;
- apr_file_write(fp, slotmem->persist, &nbytes);
+ /* XXX: Error handling */
+ apr_file_write_full(fp, slotmem->persist, nbytes, NULL);
apr_file_close(fp);
}
}
apr_size_t nbytes = size;
apr_status_t rv;
- storename = slotmem_filename(pool, name);
+ storename = slotmem_filename(pool, name, 1);
+
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, ap_server_conf, APLOGNO(02335)
+ "restoring %s", storename);
if (storename) {
rv = apr_file_open(&fp, storename, APR_READ | APR_WRITE, APR_OS_DEFAULT,
if (gpool == NULL) {
return APR_ENOSHMAVAIL;
}
- fname = slotmem_filename(pool, name);
+ fname = slotmem_filename(pool, name, 0);
if (fname) {
/* first try to attach to existing slotmem */
if (next) {
if (gpool == NULL) {
return APR_ENOSHMAVAIL;
}
- fname = slotmem_filename(pool, name);
+ fname = slotmem_filename(pool, name, 0);
if (!fname) {
return APR_ENOSHMAVAIL;
}
NULL, /* command apr_table_t */
ap_slotmem_shm_register_hook /* register hooks */
};
-