/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef MODPERL_GLOBAL_H #define MODPERL_GLOBAL_H typedef struct { #if MP_THREADED perl_mutex glock; #endif int flags; void *data; const char *name; } modperl_global_t; #if MP_THREADED typedef apr_threadkey_t modperl_tls_t; #else typedef modperl_global_t modperl_tls_t; #endif void modperl_global_request_cfg_set(request_rec *r); request_rec *modperl_global_request(pTHX_ SV *svr); void modperl_global_request_set(request_rec *r); void modperl_global_request_obj_set(pTHX_ SV *svr); void modperl_global_init(modperl_global_t *global, apr_pool_t *p, void *data, const char *name); void modperl_global_lock(modperl_global_t *global); void modperl_global_unlock(modperl_global_t *global); void *modperl_global_get(modperl_global_t *global); void modperl_global_set(modperl_global_t *global, void *data); #define MP_GLOBAL_DECL(gname, type) \ void modperl_global_init_##gname(apr_pool_t *p, type gname); \ void modperl_global_lock_##gname(void); \ void modperl_global_unlock_##gname(void); \ type modperl_global_get_##gname(void); \ void modperl_global_set_##gname(void *) /* modperl_global_get_pconf returns a thread un-safe object */ MP_GLOBAL_DECL(pconf, apr_pool_t *); /* modperl_global_get_server_rec returns a thread un-safe object */ MP_GLOBAL_DECL(server_rec, server_rec *); void modperl_global_anon_cnt_init(apr_pool_t *p); int modperl_global_anon_cnt_next(void); apr_status_t modperl_tls_create(apr_pool_t *p, modperl_tls_t **key); apr_status_t modperl_tls_get(modperl_tls_t *key, void **data); apr_status_t modperl_tls_set(modperl_tls_t *key, void *data); void modperl_tls_reset_cleanup(apr_pool_t *p, modperl_tls_t *key, void *data); #define MP_TLS_DECL(gname, type) \ apr_status_t modperl_tls_create_##gname(apr_pool_t *p); \ apr_status_t modperl_tls_get_##gname(type *data); \ apr_status_t modperl_tls_set_##gname(void *data); \ void modperl_tls_reset_cleanup_##gname(apr_pool_t *p, type data) MP_TLS_DECL(request_rec, request_rec *); #endif /* MODPERL_GLOBAL_H */ /* * Local Variables: * c-basic-offset: 4 * indent-tabs-mode: nil * End: */