[Xapian-discuss] Perl make test fails on threads in rhel5
Tim Brody
tdb01r at ecs.soton.ac.uk
Thu Nov 8 15:03:30 GMT 2007
Olly Betts wrote:
> On Thu, Nov 08, 2007 at 01:21:19PM +0000, Tim Brody wrote:
>
>> ok 34 - check PositionIterator
>> ok 35 - create TermIterator
>> ok 36 - check TermIterator
>> dubious
>> Test returned status 0 (wstat 11, 0xb)
>>
>
> Assuming that's a signal number, it died with a segmentation fault.
>
>
>> DIED. FAILED tests 37-65
>> Failed 29/65 tests, 55.38% okay
>>
>
> The next test is trying to create a valueiterator from a document, which
> was tested in 1.0.3.0 by document.t so it's not just that the wrapper
> there is wrong (and the XS code and typemap look OK anyway).
>
> The test script hasn't actually created any threads at that point, so I
> wonder if this is unrelated to threads.
>
> If you just comment out "use threads;" and the block of 4 lines lower
> down where the threads are created and joined, does it still fail?
>
Correct, without 'use threads' it still fails. Here's a minimal test:
ok( $db = Search::Xapian::Database->new('testdb'), 'create Database' );
is( $db->get_doccount(), 2, 'check Database' );
ok( $doc = $db->get_document(1), 'create Document' );
is( $doc->get_data(), 'test one', 'check Document' );
ok( $valueit = $doc->values_begin(), 'create ValueIterator' ); # dies
is( $valueit->get_valueno(), 0, 'check ValueIterator' );
> Do you get any problems reported if you run the test under valgrind?
>
> Or perhaps run under gdb to get a backtrace from where the seg fault
> happens.
>
I've never used gdb/valgrind properly ... so let me know if there's
something else to ask them:
$ gdb --args /usr/bin/perl t/thread.t
ok 34 - check PositionIterator
ok 35 - create TermIterator
ok 36 - check TermIterator
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread -1208514880 (LWP 4054)]
0x005354f4 in Xapian::ValueIterator::operator* (this=0x8a448e8)
at api/omvalueiterator.cc:45
45 }
(gdb) backtrace
#0 0x004514f4 in Xapian::ValueIterator::operator* (this=0x93aa8e8)
at api/omvalueiterator.cc:45
#1 0x00ee7f69 in XS_Search__Xapian__ValueIterator_get_value (
my_perl=0x91da008, cv=0x936b190) at XS/ValueIterator.xs:47
#2 0x0036a47d in Perl_pp_entersub ()
from /usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so
#3 0x003638df in Perl_runops_standard ()
from /usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so
#4 0x0030afc8 in Perl_amagic_call ()
from /usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so
#5 0x0036e22b in Perl_sv_2bool ()
from /usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so
#6 0x00365cd8 in Perl_pp_cond_expr ()
from /usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so
#7 0x003638df in Perl_runops_standard ()
from /usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so
#8 0x003090de in perl_run ()
from /usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so
#9 0x080491ee in main ()
$ valgrind /usr/bin/perl t/thread.t
ok 34 - check PositionIterator
ok 35 - create TermIterator
ok 36 - check TermIterator
==4073== Invalid read of size 4
==4073== at 0x47D24F4: Xapian::ValueIterator::operator*() const
(omvalueiterator.cc:45)
==4073== by 0x4762F68:
XS_Search__Xapian__ValueIterator_get_value(interpreter*, cv*)
(ValueIterator.xs:47)
==4073== by 0x36A47C: Perl_pp_entersub (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x3638DE: Perl_runops_standard (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x30AFC7: Perl_amagic_call (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x36E22A: Perl_sv_2bool (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x365CD7: Perl_pp_cond_expr (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x3638DE: Perl_runops_standard (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x3090DD: perl_run (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x80491ED: main (in /usr/bin/perl)
==4073== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==4073==
==4073== Process terminating with default action of signal 11 (SIGSEGV)
==4073== Access not within mapped region at address 0x0
==4073== at 0x47D24F4: Xapian::ValueIterator::operator*() const
(omvalueiterator.cc:45)
==4073== by 0x4762F68:
XS_Search__Xapian__ValueIterator_get_value(interpreter*, cv*)
(ValueIterator.xs:47)
==4073== by 0x36A47C: Perl_pp_entersub (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x3638DE: Perl_runops_standard (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x30AFC7: Perl_amagic_call (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x36E22A: Perl_sv_2bool (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x365CD7: Perl_pp_cond_expr (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x3638DE: Perl_runops_standard (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x3090DD: perl_run (in
/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so)
==4073== by 0x80491ED: main (in /usr/bin/perl)
More information about the Xapian-discuss
mailing list