view release on metacpan or search on metacpan
src/modules/perl/mod_perl.c view on Meta::CPAN
static int MP_post_post_config_phase = 0;
int modperl_post_post_config_phase(void)
{
return MP_post_post_config_phase;
}
#ifndef USE_ITHREADS
static apr_status_t modperl_shutdown(void *data)
{
modperl_cleanup_data_t *cdata = (modperl_cleanup_data_t *)data;
PerlInterpreter *perl = (PerlInterpreter *)cdata->data;
void **handles;
handles = modperl_xs_dl_handles_get(aTHX);
MP_TRACE_i(MP_FUNC, "destroying interpreter=0x%lx",
(unsigned long)perl);
modperl_perl_destruct(perl);
modperl_xs_dl_handles_close(handles);
src/modules/perl/mod_perl.c view on Meta::CPAN
PerlInterpreter *modperl_startup(server_rec *s, apr_pool_t *p)
{
AV *endav;
dTHXa(NULL);
MP_dSCFG(s);
PerlInterpreter *perl;
int status;
char **argv;
int argc;
#ifndef USE_ITHREADS
modperl_cleanup_data_t *cdata;
#endif
/* ensure that we start the base server's perl, before vhost's
* one, if modperl_startup was called by vhost before the former
* was started */
if (MP_init_status != 2) {
server_rec *base_server = modperl_global_get_server_rec();
PerlInterpreter *base_perl;
MP_init_status = 2; /* calls itself, so set the flag early */
src/modules/perl/mod_perl.c view on Meta::CPAN
if (!modperl_config_apply_PerlRequire(s, scfg, perl, p)) {
exit(1);
}
if (!modperl_config_apply_PerlModule(s, scfg, perl, p)) {
exit(1);
}
#ifndef USE_ITHREADS
cdata = modperl_cleanup_data_new(server_pool, (void*)perl);
apr_pool_cleanup_register(server_pool, cdata,
modperl_shutdown, apr_pool_cleanup_null);
#endif
return perl;
}
int modperl_init_vhost(server_rec *s, apr_pool_t *p,
server_rec *base_server)
{
MP_dSCFG(s);
src/modules/perl/mod_perl.c view on Meta::CPAN
/* modifies PL_ppaddr */
modperl_perl_pp_set_all();
return APR_SUCCESS;
}
static apr_status_t modperl_sys_term(void *data)
{
/* PERL_SYS_TERM() needs 'my_perl' as of 5.9.5 */
#if MP_PERL_VERSION_AT_LEAST(5, 9, 5) && defined(USE_ITHREADS)
modperl_cleanup_data_t *cdata = (modperl_cleanup_data_t *)data;
PERL_UNUSED_DECL PerlInterpreter *my_perl = cdata == NULL ? NULL : (PerlInterpreter *)cdata->data;
#endif
MP_init_status = 0;
MP_threads_started = 0;
MP_post_post_config_phase = 0;
MP_PERL_FREE_THREAD_KEY_WORKAROUND;
MP_TRACE_i(MP_FUNC, "mod_perl sys term");
modperl_perl_pp_unset_all();
src/modules/perl/modperl_global.c view on Meta::CPAN
#endif
}
typedef struct {
modperl_tls_t *key;
void *data;
} modperl_tls_cleanup_data_t;
static apr_status_t modperl_tls_reset(void *data)
{
modperl_tls_cleanup_data_t *cdata =
(modperl_tls_cleanup_data_t *)data;
return modperl_tls_set(cdata->key, cdata->data);
}
void modperl_tls_reset_cleanup(apr_pool_t *p, modperl_tls_t *key,
void *data)
{
modperl_tls_cleanup_data_t *cdata =
(modperl_tls_cleanup_data_t *)apr_palloc(p, sizeof(*cdata));
cdata->key = key;
cdata->data = data;
apr_pool_cleanup_register(p, (void *)cdata,
modperl_tls_reset,
apr_pool_cleanup_null);
}
/* hopefully there wont be many of these either */
#define MP_TLS_IMPL(gname, type) \
\
static modperl_tls_t *MP_tls_##gname; \
\
src/modules/perl/modperl_util.c view on Meta::CPAN
if (strEQ(package, SvPVX(module))) {
*dl_index = i;
return TRUE;
}
}
return FALSE;
}
modperl_cleanup_data_t *modperl_cleanup_data_new(apr_pool_t *p, void *data)
{
modperl_cleanup_data_t *cdata =
(modperl_cleanup_data_t *)apr_pcalloc(p, sizeof(*cdata));
cdata->pool = p;
cdata->data = data;
return cdata;
}
MP_INLINE void modperl_perl_av_push_elts_ref(pTHX_ AV *dst, AV *src)
{
I32 i, j, src_fill = AvFILLp(src), dst_fill = AvFILLp(dst);
av_extend(dst, src_fill);
AvFILLp(dst) += src_fill+1;
for (i=dst_fill+1, j=0; j<=AvFILLp(src); i++, j++) {
xs/APR/Pool/APR__Pool.h view on Meta::CPAN
/**
* callback wrapper for Perl cleanup subroutines
* @param data internal storage
*/
static apr_status_t mpxs_cleanup_run(void *data)
{
int count;
mpxs_cleanup_t *cdata = (mpxs_cleanup_t *)data;
#ifdef USE_ITHREADS
dTHXa(cdata->perl);
#endif
dSP;
ENTER;SAVETMPS;
PUSHMARK(SP);
if (cdata->arg) {
XPUSHs(cdata->arg);
}
PUTBACK;
save_gp(PL_errgv, 1); /* local *@ */
count = call_sv(cdata->cv, G_SCALAR|G_EVAL);
SPAGAIN;
if (count == 1) {
(void)POPs; /* the return value is ignored */
}
if (SvTRUE(ERRSV)) {
Perl_warn(aTHX_ "APR::Pool: cleanup died: %s",
SvPV_nolen(ERRSV));
}
PUTBACK;
FREETMPS;LEAVE;
SvREFCNT_dec(cdata->cv);
if (cdata->arg) {
SvREFCNT_dec(cdata->arg);
}
#ifdef USE_ITHREADS
if (cdata->interp && modperl_opt_interp_unselect) {
/* this will decrement the interp refcnt until
* there are no more references, in which case
* the interpreter will be putback into the mip
*/
MP_TRACE_i(MP_FUNC, "calling interp_unselect(0x%lx)", cdata->interp);
(void)modperl_opt_interp_unselect(cdata->interp);
}
#endif
/* the return value is ignored by apr_pool_destroy anyway */
return APR_SUCCESS;
}
/**
* register cleanups to run
* @param p pool with which to associate the cleanup
xs/Apache2/ServerUtil/Apache2__ServerUtil.h view on Meta::CPAN
#endif
} mpxs_cleanup2_t;
/**
* callback wrapper for Perl cleanup subroutines
* @param data internal storage
*/
static apr_status_t mpxs_cleanup_run(void *data)
{
int count;
mpxs_cleanup2_t *cdata = (mpxs_cleanup2_t *)data;
#ifdef USE_ITHREADS
dTHXa(cdata->perl);
#endif
dSP;
#ifdef USE_ITHREADS
PERL_SET_CONTEXT(aTHX);
#endif
ENTER;SAVETMPS;
PUSHMARK(SP);
if (cdata->arg) {
XPUSHs(cdata->arg);
}
PUTBACK;
save_gp(PL_errgv, 1); /* local *@ */
count = call_sv(cdata->cv, G_SCALAR|G_EVAL);
SPAGAIN;
if (count == 1) {
(void)POPs; /* the return value is ignored */
}
if (SvTRUE(ERRSV)) {
Perl_warn(aTHX_ "Apache2::ServerUtil: cleanup died: %s",
SvPV_nolen(ERRSV));
}
PUTBACK;
FREETMPS;LEAVE;
SvREFCNT_dec(cdata->cv);
if (cdata->arg) {
SvREFCNT_dec(cdata->arg);
}
/* the return value is ignored by apr_pool_destroy anyway */
return APR_SUCCESS;
}
/* this cleanups registered by this function are run only by the
* parent interpreter */
static MP_INLINE
void mpxs_Apache2__ServerUtil_server_shutdown_cleanup_register(pTHX_ SV *cv,
xs/maps/apr_structures.map view on Meta::CPAN
- has_arg
description
</apr_getopt_option_t>
#XML
!<apr_xml_elem>
name
ns
lang
first_cdata
following_cdata
parent
next
first_child
attr
last_child
ns_scope
priv
</apr_xml_elem>
<apr_xml_doc>
xs/tables/current/Apache2/StructureTable.pm view on Meta::CPAN
{
'type' => 'int',
'name' => 'ns'
},
{
'type' => 'const char *',
'name' => 'lang'
},
{
'type' => 'apr_text_header',
'name' => 'first_cdata'
},
{
'type' => 'apr_text_header',
'name' => 'following_cdata'
},
{
'type' => 'apr_xml_elem *',
'name' => 'parent'
},
{
'type' => 'apr_xml_elem *',
'name' => 'next'
},
{
xs/tables/current24/Apache2/StructureTable.pm view on Meta::CPAN
{
'type' => 'int',
'name' => 'ns'
},
{
'type' => 'const char *',
'name' => 'lang'
},
{
'type' => 'apr_text_header',
'name' => 'first_cdata'
},
{
'type' => 'apr_text_header',
'name' => 'following_cdata'
},
{
'type' => 'apr_xml_elem *',
'name' => 'parent'
},
{
'type' => 'apr_xml_elem *',
'name' => 'next'
},
{