Hello, Ged and other. Thanks for long suggestion letter. I've solved my problem with mod_perl compiled staticaly. GH> Hi there, GH> Haven't seen any replies, so I thought you'd like to hear from someone. :) Thanks... GH> On Wed, 2 Jul 2003, Ruslan U. Zakirov wrote:
>> I've tried to use XML::XPath under mod_perl 1.27 and Apache 1.3.27, but >> got segmentation fault GH> It's not uncommon to see XML and segfaults in the same post. :( GH> Have you searched the archives? Looked at it. My problem was different. >> Under command line and CGI it's working fine and all tests during installation of >> XML::XPath were fine, but the same code crush apache+mod_perl. GH> [snip] >> Apache - with so, unique_id, no expat >> mod_perl with everything as DSO GH> Whenever I see segfaults in a DSO Apache I'd say try static linking if GH> you don't know what else to try. :) Exactly this method is a solution. >> Summary of my perl5 (revision 5.0 version 8 subversion 0) configuration: GH> Did you compile this Perl yourself? The standard advice is to compile GH> mod_perl and Perl with the same compiler. >> usemymalloc=n, bincompat5005=undef GH> Highly unlikely, but maybe a malloc problem? >> ccversion='', gccversion='2.95.3 20010315 (release) [FreeBSD]', gccosandvers='' GH> You should be OK with that compiler, is that what you're using yourself? GH> Hope you're not using gcc 3.x with that Perl... I don't want to try 3.x yet. >> Dynamic Linking: >> dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' ' >> cccdlflags='-DPIC -fpic', lddlflags='-shared -L/usr/local/lib' GH> Never heard of Perl (as opposed to mod_perl) dynamic linking causing a GH> problem, so don't worry about that. (Until later.:) >> Backtrace: >> Program received signal SIGSEGV, Segmentation fault. >> 0x80711c5 in poolCopyString () >> (gdb) bt >> #0 0x80711c5 in poolCopyString () GH> This is the code in xmlparse.c from my 1.3.27 source tree: GH> ---------------------------------------------------------------------- GH> static const XML_Char *poolCopyString(STRING_POOL *pool, const XML_Char *s) GH> { GH> do { GH> if (!poolAppendChar(pool, *s)) GH> return 0; GH> } while (*s++); GH> s = pool->start; GH> poolFinish(pool); GH> return s; GH> } GH> ---------------------------------------------------------------------- GH> Assuming you're using the same thing... GH> As far as I can see this must mean that your pointer s is invalid, and GH> either the dereference *s causes a memory bound error or else the s++ GH> increment tries to increment it off the end of the stack or something. GH> There's nothing else in that function that would be likely to cause the GH> fault, if pool were invalid I'd expect it to happen in poolAppendChar(). GH> I have no idea why these might be but it's a bit serious of course. GH> You're into XS territory, the sort of thing that can easily be thrown GH> by struct alignment problems such as you might get on the less well GH> exercised configurations - which probably includes FreeBSD - and an GH> unsuitable combination of compilers/dso/libraries/... GH> You shouldn't have to be delving this deeply into these packages, but GH> if a static link or a compiler change doesn't fix it and you don't GH> mind cranking gdb a bit further you could find out what that pointer GH> is pointing to and if it's a valid XML_Char pointer. GH> Hope this gets you started in the right direction, but please don't GH> take it as authoritative as I've never used FreeBSD nor XML::XPath. Big thanks for your reply. GH> 73, GH> Ged. Ruslan.