diff -urp ./Makefile.in ../feedbackd-agent-branch/Makefile.in --- ./Makefile.in Sun Aug 22 08:32:58 2004 +++ ../feedbackd-agent-branch/Makefile.in Sat Nov 18 18:50:28 2006 @@ -75,7 +75,7 @@ src/%.o: $(srcdir)/src/%.c $(PLUGINS) : % : src/plugins/%.so src/plugins/%.so: src/plugins/%.o - $(CC) -shared -nostartfiles $(LDFLAGS) -o $@ $^ + $(CC) -shared -nostartfiles -o $@ $^ $(LDFLAGS) src/plugins/%.so: CFLAGS+=-fPIC $(XML_CFLAGS) src/plugins/%.so: LDFLAGS+=$(XML_LDFLAGS) diff -urp ./src/feedbackd-agent.c ../feedbackd-agent-branch/src/feedbackd-agent.c --- ./src/feedbackd-agent.c Sun Aug 22 08:32:58 2004 +++ ../feedbackd-agent-branch/src/feedbackd-agent.c Sun Nov 19 15:24:43 2006 @@ -477,7 +477,7 @@ struct service *parseService(xmlNodePtr strcat(modpath, "/"); strcat(modpath, value); - if (!(handle = dlopen(modpath, RTLD_LAZY))) { + if (!(handle = dlopen(modpath, RTLD_LAZY | RTLD_GLOBAL))) { log_printf(LOG_ERR, "Monitor plugin %s " "(defined in service %s) could " "not be loaded: %s", diff -urp ./src/plugins/perl.c ../feedbackd-agent-branch/src/plugins/perl.c --- ./src/plugins/perl.c Sun Aug 22 08:32:58 2004 +++ ../feedbackd-agent-branch/src/plugins/perl.c Sun Nov 19 15:23:46 2006 @@ -79,6 +79,20 @@ unsigned char perl_superuglyhack = 0; char *perlargs[3]; +/* (michalk) taken from the "perlembed" manpage */ + +EXTERN_C void xs_init (pTHX); +EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); + +EXTERN_C void xs_init(pTHX) +{ + dXSUB_SYS; + newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, __FILE__); +} + +/* end */ + + void (*lh)(loglevel, const char *, ...) = NULL; void _init() @@ -165,7 +179,7 @@ void *config(xmlNodePtr node) cfg->perl = perl_alloc(); PERL_SET_CONTEXT(cfg->perl); perl_construct(cfg->perl); - perl_parse(cfg->perl, NULL, 2, perlargs, (char **)NULL); + perl_parse(cfg->perl, xs_init, 2, perlargs, (char **)NULL); #else if (!perl_superuglyhack) { @@ -184,7 +198,7 @@ void *config(xmlNodePtr node) * Establish the single interpreter */ perl = perl_alloc(); perl_construct(perl); - perl_parse(perl, NULL, 2, perlargs, (char **)NULL); + perl_parse(perl, xs_init, 2, perlargs, (char **)NULL); } } @@ -207,7 +221,7 @@ int get_health(void *configdata) perl = perl_alloc(); perl_construct(perl); perlargs[1] = cfg->file; - perl_parse(perl, NULL, 2, perlargs, (char **)NULL); + perl_parse(perl, xs_init, 2, perlargs, (char **)NULL); } #endif