develooper Front page | perl.perl5.porters | Postings from February 2000

[ID 20000208.008] Attempt to free unreferenced scalar error

Thread Next
Mina Naguib
February 8, 2000 15:25
[ID 20000208.008] Attempt to free unreferenced scalar error
Message ID:

This is a bug report for perl from,
generated with the help of perlbug 1.26 running under perl 5.00503.

I was advised by everyone at #perl on efnet to report this bug
to you via perlbug.

Here is a simple server I wrote, here's how to replicate the bug. (well,
that's how I get the bug):

Run the server, it defaults to listening on to port 9000

launch 4-6 telnet sessions to the server:port so the server will fork
4-6 clients

press CTRL+C to terminate the server (without closing the telnet
connections first)

It goes into the exit procedure but the last line it displays is always
the error message :
Attempt to free unreferenced scalar

It doesn't seem to have any side effect on the program, however, I thought
I would report. It would certainly be nice to get rid of it.

Would like to hear back from you soon :) Thank you for your time.


# Written by Mina Naguib [ ]


use IO::Socket;
use Net::hostent;

$SIG{INT} = sub { 
	if ($childpid eq "0") {
#		print $client "Sorry, but I have to go now..\n";
		close $client;
	else {
#		print "Server going down\n";
		close $server;
	exit 0;


sub init() {
	my $port = shift(@ARGV) || 9000;
	$server = IO::Socket::INET->new( Proto     => 'tcp',
                                  LocalPort => $port,
                                  Listen    => SOMAXCONN,
                                  Reuse     => 1);
	die "Can't setup server. Port used ? or under 1024 and you're not root ?\n" unless $server;
	print "Listening on port $port . . .\n";
	$0 = "TCPSERV Listening";

sub mainloop() {
	while ($client = $server->accept()) {
		$childpid = fork();
		if ($childpid eq "0") {
			# The fork went fine, I'm the client
			my $hostinfo = gethostbyaddr($client->peeraddr);
			printf "[Connect from %s]\n", $hostinfo->name || $client->peerhost;
			$0 = "TCPSERV - " . $client->peerhost;
		elsif (!defined $childpid) {
			# The fork didn't work, I'm the server
			die "I can't fork like this!\n";
		else {
			# The fork went fine, I'm the server
			close $client;

sub handleclient() {
	print $client "Welcome to TCPSERV\n";
	while (<$client>) {
		print $client "$_\n";
	close $client;
	exit 0;

sub REAPER() {
	my $temp = wait;
        $SIG{CHLD} = \&REAPER;  # loathe sysV
	print "Client PID $temp just got reaped\n";

Site configuration information for perl 5.00503:

Configured by root at Mon Aug 30 23:08:56 EDT 1999.

Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
    osname=linux, osvers=2.2.5-22smp, archname=i386-linux
    uname='linux 2.2.5-22smp #1 smp wed jun 2 09:11:51 edt 1999 i686 unknown '
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef useperlio=undef d_sfio=undef
    cc='cc', optimize='-O2', gccversion=egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
    cppflags='-Dbool=char -DHAS_BOOL -I/usr/local/include'
    ccflags ='-Dbool=char -DHAS_BOOL -I/usr/local/include'
    stdchar='char', d_stdstdio=undef, usevfork=false
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    alignbytes=4, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -ldl -lm -lc -lposix -lcrypt
    libc=, so=so, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'

Locally applied patches:

@INC for perl 5.00503:

Environment for perl 5.00503:
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PERL_BADLANG (unset)

Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About