idallen@watmath.UUCP (07/15/84)
From: phb@dcdwest.UUCP Newsgroups: net.unix-wizards Subject: Possible bug in 4.2 BSD csh We have noticed a case where a csh shell script which contains a loop that runs for many hours (sometimes, days even) accumulates all the free memory on the system and causes the vax to brought to its knees due to paging activity. A simple such script is: while ( 1 ) /bin/echo `date` end The C Shell does not free the GLOBbed argument list of a non-builtin command if another GLOB non-builtin command immediately follows. You get a new list every time, and the memory just grows until it's all gone. (This thanks to vfork() and the child allocating the glob list in the parent's address space without telling the parent how to free it after the exec()!) Since the entire chain of allocated and free memory blocks has to be searched to get the new memory, you touch a lot of pages every time. If you like to see other antisocial behaviour of the shell, try any of the following quick bugs: limit cputime 1.0e99 setenv USER 'xxxx*yyyy' ; /bin/csh set xx='echo `echo hi`' ; eval $xx set xx='echo `echo (`' ; eval $xx date | if ( 1 ) /bin/echo The date is `cat` sleep 60 && echo hi & alias % anything ; alias date ; exit ; echo I said EXIT dammit ; date ; date ( sleep 999 & ; jobs ; kill %% ; jobs ; jobs ; jobs ) You will also note that if you run a C Shell script and a command returns a non-zero status, the shell will branch to byte 1024 of the file. If the file isn't that long, the script terminates prematurely. I'd go on, but 20 pages of C Shell bugs doesn't belong in this newsgroup. Maybe I'll post it to net.sources some day. -- -IAN! (Ian! D. Allen) University of Waterloo
lepreau@utah-cs.UUCP (Jay Lepreau) (07/17/84)
On the contrary, the "Caltech" malloc distributed with 4.2 does no searching to allocate additional memory. Jay Lepreau