On Dec 31, 2008, at 7:04 PM, John Malmberg wrote:
With this build, I am seeing the following failures on VMS:
lib/Thread/Queue/t/02_refs.t is failing on tests 18, 23, 24, and 26
I haven't looked at that one yet.
The new test lib/autodie/truncate.t fails on test 3 and then hangs
until it is killed.
EAGLE> mcr [-]ndbgperl.exe -d "-I../" lib/autodie/truncate.t
Daughter DB session started...
1..3
ok 1 - Truncating STDOUT should throw an exception isa
autodie::exception
ok 2 - Truncating an unopened file is wrong. isa autodie::exception
not ok 3 - Truncating a normal file should be fine
# Failed test 'Truncating a normal file should be fine'
# at lib/autodie/truncate.t line 52.
# got: 'Can't truncate('VMS::Stdio=GLOB(0x1118210)', '0'):
invalid argument at (eval 47)[/PROJECT_ROOT/PERL-BLEAD/lib/Fatal
.pm:829] line 30
# '
# expected: ''
I've noticed this too but haven't gotten to the bottom of it yet. The
code where the hang occurs looks like this:
eval {
use autodie;
truncate($tmpfh, 0);
};
is($@, "", "Truncating a normal file should be fine");
The first clue as to what's wrong is that it isn't really a "normal"
file that we are attempting to truncate -- it is a temp file with the
delete-on-close bit set. It was opened by VMS::Stdio::vmssysopen from
File::Temp.
The hang appears to be here:
*PERLIO PerlIOUnix_close 80449 0000000000006B38 00000000000CB1B8
*PERLIO PerlIOBase_close 79879 00000000000053DC 00000000000C9A5C
*PERLIO PerlIOBuf_close 81783 000000000000984C 00000000000CDECC
*PERLIO PerlIO__close 79117 0000000000002B6C 00000000000C71EC
*PERLIO Perl_PerlIO_close 79130 0000000000002C14 00000000000C7294
*DOIO Perl_io_close 71328 0000000000003824 0000000000127274
*DOIO Perl_do_close 71289 00000000000034A0 0000000000126EF0
*PP_SYS Perl_pp_close 70940 00000000000021AC 0000000000236ABC
*DUMP Perl_runops_debug 81364 00000000000087C4 00000000001B9164
*PERL Perl_call_sv 73195 0000000000005B48 00000000000BD478
*PERL Perl_call_list 80754 000000000000BF78 00000000000C38A8
*PERL perl_destruct 71132 0000000000000F78 00000000000B88A8
What's hanging is when the END block in File::Temp tries to clean up
by closing the file. There may be a pending write or something.
I think there are really two problems. There is the hang in
File::Temp's clean-up code. We should check to make sure the right
flavor of flush is getting called for something opened from VMS::Stdio.
Upstream of that is the problem that we cannot call truncate on a
filehandle opened with VMS::Stdio. The documentation for VMS::Stdio
says VMS::Stdio ISA IO::File and you can treat its handles like any
other Perl filehandles. So something in the class metadata appears to
be getting mangled.
________________________________________
Craig A. Berry
mailto:craigbe...@mac.com
"... getting out of a sonnet is much more
difficult than getting in."
Brad Leithauser