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

[ID 20000208.008] Attempt to free unreferenced scalar error

Thread Next
From:
Mina Naguib
Date:
February 8, 2000 15:25
Subject:
[ID 20000208.008] Attempt to free unreferenced scalar error
Message ID:
200002082329.SAA06393@diane.idirect.com

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

Hello
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.

#!/usr/bin/perl

#
# MY FIRST GENERIC TCP SERVER
# Written by Mina Naguib [ open@idirect.com ]
#


$|++;

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;
	};
$SIG{CHLD} = \&REAPER;

init();
mainloop();


sub init() {
	$TOTALCHILDREN = "0";
	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
			#
			$client->autoflush(1);
			my $hostinfo = gethostbyaddr($client->peeraddr);
			printf "[Connect from %s]\n", $hostinfo->name || $client->peerhost;
			$0 = "TCPSERV - " . $client->peerhost;
			handleclient();
			}
		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
			#
			$TOTALCHILDREN++;
			close $client;
			}
		}
	}

sub handleclient() {
	print $client "Welcome to TCPSERV\n";
	while (<$client>) {
		chomp;
		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";
	$TOTALCHILDREN--;
	}

---
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:
  Platform:
    osname=linux, osvers=2.2.5-22smp, archname=i386-linux
    uname='linux porky.devel.redhat.com 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
  Compiler:
    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:
    /usr/lib/perl5/5.00503/i386-linux
    /usr/lib/perl5/5.00503
    /usr/lib/perl5/site_perl/5.005/i386-linux
    /usr/lib/perl5/site_perl/5.005
    .

---
Environment for perl 5.00503:
    HOME=/home/mina
    LANG=en_US
    LANGUAGE (unset)
    LC_ALL=en_US
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/mina/bin:.:/home/mina/util:/usr/sbin
    PERL_BADLANG (unset)
    SHELL=/bin/bash

Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About