Anthony
--- quote ----
#include "modules/perl/mod_perl.h"
static mod_perl_perl_dir_config *newPerlConfig(pool *p)
{
mod_perl_perl_dir_config *cld =
(mod_perl_perl_dir_config *)
palloc(p, sizeof (mod_perl_perl_dir_config));
cld->obj = Nullsv;
cld->pclass = "Apache::AuthCAS";
register_cleanup(p, cld, perl_perl_cmd_cleanup, null_cleanup);
return cld;
}static void *create_dir_config_sv (pool *p, char *dirname)
{
return newPerlConfig(p);
}static void *create_srv_config_sv (pool *p, server_rec *s)
{
return newPerlConfig(p);
}static void stash_mod_pointer (char *class, void *ptr)
{
SV *sv = newSV(0);
sv_setref_pv(sv, NULL, (void*)ptr);
hv_store(perl_get_hv("Apache::XS_ModuleConfig",TRUE),
class, strlen(class), sv, FALSE);
}static mod_perl_cmd_info cmd_info_CASServerName = {
"Apache::AuthCAS::CASServerName", "",
};
static mod_perl_cmd_info cmd_info_CASServerPath = {
"Apache::AuthCAS::CASServerPath", "",
};
static mod_perl_cmd_info cmd_info_CASServerPort = {
"Apache::AuthCAS::CASServerPort", "",
};
static mod_perl_cmd_info cmd_info_CASCaFile = {
"Apache::AuthCAS::CASCaFile", "",
};static command_rec mod_cmds[] = {
{ "CASServerName", perl_cmd_perl_TAKE1,
(void*)&cmd_info_CASServerName,
OR_AUTHCFG, TAKE1, "URL of the CAS server" }, { "CASServerPath", perl_cmd_perl_TAKE1,
(void*)&cmd_info_CASServerPath,
OR_AUTHCFG, TAKE1, "Path on CAS on the server (default is /)" },{ "CASServerPort", perl_cmd_perl_TAKE1,
(void*)&cmd_info_CASServerPort,
OR_AUTHCFG, TAKE1, "Port the CAS server is listenning on (default is 443)" },
{ "CASCaFile", perl_cmd_perl_TAKE1,
(void*)&cmd_info_CASCaFile,
OR_AUTHCFG, TAKE1, "Location of the CAS server public key" }, { NULL }
};module MODULE_VAR_EXPORT XS_Apache__AuthCAS = {
STANDARD_MODULE_STUFF,
NULL, /* module initializer */
create_dir_config_sv, /* per-directory config creator */
NULL, /* dir config merger */
create_srv_config_sv, /* server config creator */
NULL, /* server config merger */
mod_cmds, /* command table */
NULL, /* [7] list of handlers */
NULL, /* [2] filename-to-URI translation */
NULL, /* [5] check/validate user_id */
NULL, /* [6] check user_id is valid *here* */
NULL, /* [4] check access by host address */
NULL, /* [7] MIME type checker/setter */
NULL, /* [8] fixups */
NULL, /* [10] logger */
NULL, /* [3] header parser */
NULL, /* process initializer */
NULL, /* process exit/cleanup */
NULL, /* [1] post read_request handling */
};#define this_module "Apache/AuthCAS.pm"
static void remove_module_cleanup(void *data)
{
if (find_linked_module("Apache::AuthCAS")) {
/* need to remove the module so module index is reset */
remove_module(&XS_Apache__AuthCAS);
}
if (data) {
/* make sure BOOT section is re-run on restarts */
(void)hv_delete(GvHV(incgv), this_module,
strlen(this_module), G_DISCARD);
if (dowarn) {
/* avoid subroutine redefined warnings */
perl_clear_symtab(gv_stashpv("Apache::AuthCAS", FALSE));
}
}
}MODULE = Apache::AuthCAS PACKAGE = Apache::AuthCAS
PROTOTYPES: DISABLE
BOOT:
XS_Apache__AuthCAS.name = "Apache::AuthCAS";
add_module(&XS_Apache__AuthCAS);
stash_mod_pointer("Apache::AuthCAS", &XS_Apache__AuthCAS);
register_cleanup(perl_get_startup_pool(), (void *)1,
remove_module_cleanup, null_cleanup);void END()
CODE:
remove_module_cleanup(NULL);---- quote ----
Stas Bekman wrote:
Anthony Hinsinger wrote:
i restarted a gdb session so *sv has changed (backtrace is exactly the same as in previous post)
That's normal.
(gdb) p *sv $2 = (SV *) 0x2d656863 (gdb) p **sv Cannot access memory at address 0x2d656863 (gdb)
So *sv is bogus. That means that data->obj is bogus in:
#2 0x0807c99b in perl_cmd_perl_TAKE1 (cmd=0xbffffa10, data=0xbffffa10, one=0xbffffa10 "[EMAIL PROTECTED]") at perl_config.c:859
invoked by
#3 0x080b9fe9 in invoke_cmd (cmd=0x4001bc80, parms=0xbffffa10, mconfig=0x888fdb4, args=0xbfffd9e3 "") at http_config.c:828
You can test, by going to frame #2
gdb> up gdb> up gdb> p data->obj gdb> p *data->obj
So most likely something is wrong with your XS code that creates the new directive. Show us the XS code.
-- Report problems: http://perl.apache.org/bugs/ Mail list info: http://perl.apache.org/maillist/modperl.html List etiquette: http://perl.apache.org/maillist/email-etiquette.html
