Return to BSD News archive
Newsgroups: comp.unix.bsd
Path: sserve!manuel!munnari.oz.au!network.ucsd.edu!usc!elroy.jpl.nasa.gov!decwrl!csus.edu!netcom.com!elh
From: elh@netcom.com (Ed Hudson)
Subject: Re: apparent csh bug, 386bsd (WITH FIX)
Message-ID: <-y9mcz-.elh@netcom.com>
Date: Mon, 17 Aug 92 17:28:39 GMT
Organization: Netcom - Online Communication Services (408 241-9760 guest)
References: <1992Aug15.201227.11858@noose.ecn.purdue.edu>
Keywords: free(), core.csh
Lines: 62
hi.
/* many, many thanks to the jolitz's, gnu, cgd...
* this stuff is really sex on wheels!
*/
i ran into the same csh bug that bri@pegasus.mit.edu and
tgt@neon.ecn.purdue.edu have reported (but for me, it was
with 5 character directory names). what follows is a work-around,
not a real fix - but solves all of the problems that i've had.
i haven't posted this to the net before, because i wanted to post
a real fix for the real problem.
i believe that the 'csh' bug is a memory allocation problem
of some kind.
my 'fix' is to just allocated 4 additional bytes on each call to
malloc. having done this, i have seen no other problems with
the csh.
*** /usr/src/bin/csh/alloc.c Mon Aug 10 21:14:15 1992
--- /usr/src/bin/csh/Orig/alloc.c Mon Aug 10 21:08:09 1992
***************
*** 156,163 ****
register int bucket = 0;
register unsigned shiftr;
- nbytes= nbytes + 4;
-
/*
* Convert amount of memory requested into closest block size stored in
* hash buckets which satisfies request. Account for space used per block
--- 156,161 ----
in any event, here's my data on the bug problem:
i've encountered a problem that i believe is a memory allocation bug
in csh.
i have a prompt setting alias in my .cshrc for "cd", that looks like:
alias cd 'cd \,* > /dev/null; set noglob; set xdirs = `dirs`; set prompt = "$user@$hostname $xdirs[1]:q \, % "; unset noglob xdirs'
the bug manifests itself when i type:
cd
cd bin01
the csh says "Segmentation fault", and on a repeated attempt, dies.
it seems to occur whenever the target directory is 5 characters in name length.
i think that it is blowing up when the statement "set xdirs = `dirs`" is executed.
if i modify /usr/src/bin/csh/alloc.c so that the number of bytes requested is automatically
increased by 4 (on entry to malloc), then the problem goes away.
i'm not sufficiently expert with gdb or the structure of csh to debug this
properly.
my hardware is: DTK 486-25, AD1542b, WD8013, 16meg, maxtor 8380.