void *slotmem = NULL;
ap_slotmem_t *res;
ap_slotmem_t *next = globallistmem;
- char *fname;
+ const char *fname;
apr_status_t rv;
- fname = ap_server_root_relative(pool, name);
-
- /* first try to attach to existing slotmem */
- if (next) {
- for (;;) {
- if (strcmp(next->name, fname) == 0) {
- /* we already have it */
- *new = next;
- return APR_SUCCESS;
+ if (name) {
+ if (name[0] == ':')
+ fname = name;
+ else
+ fname = ap_server_root_relative(pool, name);
+
+ /* first try to attach to existing slotmem */
+ if (next) {
+ for (;;) {
+ if (strcmp(next->name, fname) == 0) {
+ /* we already have it */
+ *new = next;
+ return APR_SUCCESS;
+ }
+ if (!next->next)
+ break;
+ next = next->next;
}
- if (!next->next)
- break;
- next = next->next;
}
- }
+ } else
+ fname = "anonymous";
/* create the memory using the globalpool */
res = (ap_slotmem_t *) apr_pcalloc(globalpool, sizeof(ap_slotmem_t));
void *slotmem = NULL;
ap_slotmem_t *res;
ap_slotmem_t *next = globallistmem;
- char *fname;
+ const char *fname;
apr_status_t rv;
- fname = ap_server_root_relative(pool, name);
+ if (name) {
+ if (name[0] == ':')
+ fname = name;
+ else
+ fname = ap_server_root_relative(pool, name);
+ } else
+ return APR_ENOSHMAVAIL;
/* first try to attach to existing slotmem */
if (next) {
struct sharedslotdesc desc;
ap_slotmem_t *res;
ap_slotmem_t *next = globallistmem;
- char *fname;
+ const char *fname;
apr_status_t rv;
- fname = ap_server_root_relative(pool, name);
+ if (name) {
+ if (name[0] == ':')
+ fname = name;
+ else
+ fname = ap_server_root_relative(pool, name);
- /* first try to attach to existing slotmem */
- if (next) {
- for (;;) {
- if (strcmp(next->name, fname) == 0) {
- /* we already have it */
- *new = next;
- return APR_SUCCESS;
+ /* first try to attach to existing slotmem */
+ if (next) {
+ for (;;) {
+ if (strcmp(next->name, fname) == 0) {
+ /* we already have it */
+ *new = next;
+ return APR_SUCCESS;
+ }
+ if (!next->next)
+ break;
+ next = next->next;
}
- if (!next->next)
- break;
- next = next->next;
}
- }
+ } else
+ fname = "anonymous";
/* first try to attach to existing shared memory */
res = (ap_slotmem_t *) apr_pcalloc(globalpool, sizeof(ap_slotmem_t));
- rv = apr_shm_attach(&res->shm, fname, globalpool);
+ if (name && name[0] != ':')
+ rv = apr_shm_attach(&res->shm, fname, globalpool);
+ else
+ rv = APR_EINVAL;
if (rv == APR_SUCCESS) {
/* check size */
if (apr_shm_size_get(res->shm) != item_size * item_num + sizeof(struct sharedslotdesc)) {
}
ptr = ptr + sizeof(desc);
} else {
- rv = apr_shm_create(&res->shm, item_size * item_num + sizeof(struct sharedslotdesc), fname, globalpool);
+ if (name && name[0] != ':')
+ rv = apr_shm_create(&res->shm, item_size * item_num + sizeof(struct sharedslotdesc), fname, globalpool);
+ else
+ rv = apr_shm_create(&res->shm, item_size * item_num + sizeof(struct sharedslotdesc), NULL, globalpool);
if (rv != APR_SUCCESS)
return rv;
ptr = apr_shm_baseaddr_get(res->shm);
ap_slotmem_t *res;
ap_slotmem_t *next = globallistmem;
struct sharedslotdesc desc;
- char *fname;
+ const char *fname;
apr_status_t rv;
- fname = ap_server_root_relative(pool, name);
+ if (name) {
+ if (name[0] == ':')
+ fname = name;
+ else
+ fname = ap_server_root_relative(pool, name);
+ } else
+ return APR_ENOSHMAVAIL;
/* first try to attach to existing slotmem */
if (next) {
* limitations under the License.
*/
+#ifndef SLOTMEM_H
#define SLOTMEM_H
/* Memory handler for a shared memory divided in slot.
* @{
*/
+#include "apr.h"
+#include "apr_strings.h"
+#include "apr_pools.h"
+#include "apr_shm.h"
+
+#include "httpd.h"
+#include "http_config.h"
+#include "http_log.h"
#define SLOTMEM_STORAGE "slotmem"
};
typedef struct slotmem_storage_method slotmem_storage_method;
+
+#endif /*SLOTMEM_H*/
#define CORE_PRIVATE
#include "mod_proxy.h"
-#include "slotmem.h"
#include "mod_core.h"
#include "apr_optional.h"
#include "scoreboard.h"
static int proxy_post_config(apr_pool_t *pconf, apr_pool_t *plog,
apr_pool_t *ptemp, server_rec *s)
{
- proxy_server_conf *sconf = ap_get_module_config(s->module_config,
- &proxy_module);
proxy_ssl_enable = APR_RETRIEVE_OPTIONAL_FN(ssl_proxy_enable);
proxy_ssl_disable = APR_RETRIEVE_OPTIONAL_FN(ssl_engine_disable);
proxy_ssl_val = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
/* if we have a memory provider create the comarea here */
- proxy_create_comarea(pconf, sconf->slotmem_loc);
+ proxy_create_comarea(pconf, s);
/* Also fill the comarea of the health-checker */
proxy_checkstorage_add_workers(pconf, s);
#include "util_filter.h"
#include "util_ebcdic.h"
#include "ap_provider.h"
+#include "slotmem.h"
#if APR_HAVE_NETINET_IN_H
#include <netinet/in.h>
/* proxy_util.c */
-PROXY_DECLARE(void) proxy_create_comarea(apr_pool_t *pconf, char *name);
+PROXY_DECLARE(ap_slotmem_t *) proxy_create_comarea(apr_pool_t *pconf, server_rec *s);
PROXY_DECLARE(void) proxy_checkstorage_add_workers(apr_pool_t *pconf, server_rec *s);
PROXY_DECLARE(void) proxy_lookup_storage_provider();
/* Utility routines for Apache proxy */
#include "mod_proxy.h"
-#include "slotmem.h"
#include "mod_proxy_health_checker.h"
#include "ap_mpm.h"
#include "apr_version.h"
void *score = NULL;
ap_slotmem_t *myscore;
apr_status_t rv;
- apr_size_t item_size = sizeof(proxy_worker_stat);
proxy_server_conf *sconf = ap_get_module_config(s->module_config,
&proxy_module);
return;
}
- /* Health checker handler: to create the correct size. */
- if (checkstorage) {
- item_size = checkstorage->getentrysize();
- }
-
/* Use storage provider when a storage is existing */
if (storage) {
+ myscore = proxy_create_comarea(conf->pool, s);
- rv = storage->ap_slotmem_create(&myscore, sconf->slotmem_loc, item_size, ap_proxy_lb_workers(), conf->pool);
- if (rv == APR_SUCCESS)
+ if (myscore)
rv = storage->ap_slotmem_mem(myscore, worker->id, &score);
if (rv != APR_SUCCESS)
score = NULL;
}
/* Create shared area (comarea) called from mod_proxy post_config */
-PROXY_DECLARE(void) proxy_create_comarea(apr_pool_t *pconf, char *name)
+PROXY_DECLARE(ap_slotmem_t *) proxy_create_comarea(apr_pool_t *pconf, server_rec *s)
{
- ap_slotmem_t *myscore;
- apr_size_t item_size = sizeof(proxy_worker_stat);
- if (checkstorage)
- item_size = checkstorage->getentrysize();
- if (storage)
- storage->ap_slotmem_create(&myscore, name, item_size, ap_proxy_lb_workers(), pconf);
+ ap_slotmem_t *myscore = NULL;
+ proxy_server_conf *sconf = ap_get_module_config(s->module_config,
+ &proxy_module);
+ char *slotmem_loc = sconf->slotmem_loc;
+
+ if (storage) {
+ if (!slotmem_loc)
+ slotmem_loc = apr_pstrcat(pconf, ":", proxy_module.name, NULL);
+ storage->ap_slotmem_create(&myscore, slotmem_loc, sizeof(proxy_worker_stat), ap_proxy_lb_workers(), pconf);
+ }
+ return(myscore);
}
/* get the storage provider for the shared area called from mod_proxy pre_config */
PROXY_DECLARE(void) proxy_lookup_storage_provider()