cdata = modperl_cleanup_data_new(p, (void*)perl); apr_pool_cleanup_register(p, cdata,
cdata = modperl_cleanup_data_new(server_pool, (void*)perl); apr_pool_cleanup_register(server_pool, cdata,
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#ifdef MP_USE_GTOP    MP_TRACE_m_do(        scfg->gtop = modperl_gtop_new(p);        modperl_gtop_do_proc_mem_before(MP_FUNC ": perl_parse");    );#endif    argv = modperl_config_srv_argv_init(scfg, &argc);    if (!(perl = perl_alloc())) {        perror("perl_alloc");        exit(1);    }#ifdef USE_ITHREADS    aTHX = perl;#endif    perl_construct(perl);    PL_perl_destruct_level = 2;    MP_boot_data_set(p, s);    status = perl_parse(perl, modperl_xs_init, argc, argv, NULL);    MP_boot_data_set(NULL, NULL);    if (status) {        perror("perl_parse");        exit(1);    }    /* suspend END blocks to be run at server shutdown */    endav = PL_endav;    PL_endav = Nullav;    perl_run(perl);    PL_endav = endav;    MP_TRACE_i(MP_FUNC, "constructed interpreter=0x%lx\n",               (unsigned long)perl);#ifdef MP_USE_GTOP    MP_TRACE_m_do(        modperl_gtop_do_proc_mem_after(MP_FUNC ": perl_parse");    );#endif    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(p, (void*)perl);    apr_pool_cleanup_register(p, cdata,                              modperl_shutdown, apr_pool_cleanup_null);#endif        return perl;}