Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!ucsd!hub!eiffel!jp From: jp@eiffel.UUCP (Jean-Pierre Sarkis) Newsgroups: comp.lang.eiffel Subject: Re: Eiffel Problems, Problems, Problems Summary: Solution Message-ID: <268@eiffel.UUCP> Date: 15 Mar 90 21:41:02 GMT References: <2983@goanna.oz.au> <5983@star.cs.vu.nl> Organization: Interactive Software Engineering, Santa Barbara CA Lines: 74 The garbage collector problem encountered by Paul Menon and Jos Warmer apparently corresponds to a bug in the run-time system of 2.2B, which manifests itself when the garbage collector is run in certain conditions (having to do with string objects). The following fix, which should remove Professor Menon's problem, may be applied by all installations. Mail will be sent regarding the other problems mentioned in Professor Menon's message. -- Jean-Pierre Sarkis jp@eiffel.com (Reply address for this and any other customer support problem: eiffel@eiffel.com) ------------------------------------------------------------ The correction should be applied to routine get_arg in file _basic.c in directory INSTALLATION_DIRECTORY/Eiffel/files. How to proceed: 1. ``Change directory'' to the above directory. 2. Make a backup copy of file `_basic.c'. 3. Edit this file and change the definition of function get_arg () as indicated below in ``diff'' format. ................. BEGIN CHANGE ...................... 220,221c220,221 < DATUM strarg; < if(n >= argc) return(DATINT(0)); --- > DATPTR strarg; > if(n >= argc) return((DATUM)NULL); 238,240c238,241 < strarg = DATOBJ ( MakeStr(p+1)); < if (gac_option) ONCE(strarg); < return(strarg); --- > strarg = (DATPTR)malloc (sizeof(DATPTR)); > (*strarg) = DATOBJ ( MakeStr(p+1)); > if (gac_option) ONCE(*strarg); > return(*strarg); 260,262c261,264 < strarg = DATOBJ ( MakeStr(p)); < if (gac_option) ONCE(strarg); < return(strarg); --- > strarg = (DATPTR)malloc (sizeof(DATPTR)); > (*strarg) = DATOBJ ( MakeStr(p)); > if (gac_option) ONCE(*strarg); > return(*strarg); ................. END CHANGE ...................... 4. Re-generate the archive of the run-time system by running make -f _makeD 5. [Only on a BSD version of Unix]: Run ranlib _run_time.a This should correct the problem.