Hi,
I recently upgraded a system (as far as perl is concerned from 5.8.7 to 5.10.0).
Afterwards I ran into a mysterious problem. I could eventually find a
workaround,
but still don't really understand, what is going on.
After the upgrade, a perl program wouldn't run anymore - it crashed with a
message:
"*** glibc detected *** /usr/bin/perl: double free or corruption (fasttop): ..."
and a memory map suggesting some problem on the heap.
The crash can be reproduced by the following code:
use Net::LDAP;
my $self=Net::LDAP->new("127.0.0.1");
($self->{prog_name}= $0) =~ s|^.*/([^/]+)$|$1|;
# when I put an intermediate variable into the statement:
$self->{prog_name}= (my $_p= $0) =~ s|^.*/([^/]+)$|$1|;
the program works again.
Technically, my problem is solved, but maybe somebody here can shed some light
on
some questions:
- Where does glib come into play? Is it generally used by perl?
- I tried to run the program under the debugger hoping to find, where exactly
the
error occurs - unfortunately the same program suddenly worked just fine, so I
ended up putting print statements into the code until I eventually found the
problematic line. Why can't the crash be reproduced under the debugger?
Would there be an easier way to find the problem?
- Generally, I still don't understand what's wrong with the original program
code.
I didn't try it but I don't think it is anything specific to Net::LDAP.
However,
when $self is just some hash reverence ("my $self={}"), the code also works
without any problem.
Regards,
Peter Daum
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/