From d8e045e85472c17623951b079c0cb8ed20b0b6c3 Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Mon, 22 Oct 2012 16:54:46 +0000 Subject: [PATCH] Merge r1387085 from trunk: Use our private function and just allow for conditonal concat of .persist suffix Reviewed/backported by: jim Merge r1386726 from trunk: Add debug output when slotmem is persisting shm Reviewed/backported by: jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1400951 13f79535-47bb-0310-9956-ffa450edef68 --- STATUS | 9 -------- modules/slotmem/mod_slotmem_shm.c | 35 ++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/STATUS b/STATUS index 9d0c3a09e8..c6f366c693 100644 --- a/STATUS +++ b/STATUS @@ -89,15 +89,6 @@ RELEASE SHOWSTOPPERS: 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 ] diff --git a/modules/slotmem/mod_slotmem_shm.c b/modules/slotmem/mod_slotmem_shm.c index 33acb48834..552ee81254 100644 --- a/modules/slotmem/mod_slotmem_shm.c +++ b/modules/slotmem/mod_slotmem_shm.c @@ -84,6 +84,7 @@ static apr_pool_t *gpool = NULL; #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) @@ -128,7 +129,8 @@ 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) { @@ -136,12 +138,18 @@ static const char *slotmem_filename(apr_pool_t *pool, const char *slotmemname) } 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; } @@ -164,6 +172,11 @@ static void slotmem_clearinuse(ap_slotmem_instance_t *slot) } } +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; @@ -171,7 +184,10 @@ static void store_slotmem(ap_slotmem_instance_t *slotmem) 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, @@ -189,7 +205,8 @@ static void store_slotmem(ap_slotmem_instance_t *slotmem) } 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); } } @@ -203,7 +220,10 @@ static void restore_slotmem(void *ptr, const char *name, apr_size_t size, 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, @@ -295,7 +315,7 @@ static apr_status_t slotmem_create(ap_slotmem_instance_t **new, 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) { @@ -420,7 +440,7 @@ static apr_status_t slotmem_attach(ap_slotmem_instance_t **new, if (gpool == NULL) { return APR_ENOSHMAVAIL; } - fname = slotmem_filename(pool, name); + fname = slotmem_filename(pool, name, 0); if (!fname) { return APR_ENOSHMAVAIL; } @@ -715,4 +735,3 @@ AP_DECLARE_MODULE(slotmem_shm) = { NULL, /* command apr_table_t */ ap_slotmem_shm_register_hook /* register hooks */ }; - -- 2.50.1