Date: Sun, 9 Feb 1997 02:22:03 -0500 From: Andrew Herdman <andrew@why.whine.com> To: J Wunsch <j@uriah.heep.sax.de> Cc: Andrew Herdman <andrew@why.whine.com>, Poul-Henning Kamp <phk@critter.dk.tfs.com>, current@freebsd.org Subject: Re: Make world of Current dies with weird errors. Message-ID: <Pine.BSF.3.95.970209021828.485C-100000@why> In-Reply-To: <Mutt.19970209005049.j@uriah.heep.sax.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 8 Feb 1997, J Wunsch wrote: > As Andrew Herdman wrote: > > > Core was generated by `make'. > > Program terminated with signal 6, Abort trap. > > Cannot access memory at address 0x654f0. > > #0 0x807de11 in ?? () > > (gdb) bt > > #0 0x807de11 in ?? () > > #1 0x807d6e3 in ?? () > > #2 0x807c232 in ?? () > > #3 0x807c270 in ?? () > > #4 0x807d24b in ?? () > > #5 0x807d432 in ?? () > > #6 0x12731 in Lst_Destroy (l=0x588c0, freeProc=0) > > at /usr/src/usr.bin/make/lst.lib/lstDestroy.c:99 > > Do an ``up 6'', this should get you here. There's most likely a > free() call on line 99. It seems this one is freed multiple times > (for some reason). Ok, here it is.... (gdb) up 6 #6 0x12731 in Lst_Destroy (l=0x588c0, freeProc=0) at /usr/src/usr.bin/make/lst.lib/lstDestroy.c:99 99 free ((Address)ln); (gdb) This is the function: /*- *----------------------------------------------------------------------- * Lst_Destroy -- * Destroy a list and free all its resources. If the freeProc is * given, it is called with the datum from each node in turn before * the node is freed. * * Results: * None. * * Side Effects: * The given list is freed in its entirety. * *----------------------------------------------------------------------- */ void Lst_Destroy (l, freeProc) Lst l; register void (*freeProc) __P((ClientData)); { register ListNode ln; register ListNode tln = NilListNode; register List list = (List)l; if (l == NILLST || ! l) { /* * Note the check for l == (Lst)0 to catch uninitialized static Lst's. * Gross, but useful. */ return; } /* To ease scanning */ if (list->lastPtr != NilListNode) list->lastPtr->nextPtr = NilListNode; else { free ((Address)l); return; } if (freeProc) { for (ln = list->firstPtr; ln != NilListNode; ln = tln) { tln = ln->nextPtr; (*freeProc) (ln->datum); free ((Address)ln); } } else { for (ln = list->firstPtr; ln != NilListNode; ln = tln) { tln = ln->nextPtr; free ((Address)ln); /* This is line 99 */ } } free ((Address)l); } I look at this and my head hurts. I'm afraid pascal was my language of choice during my programming times.... :( Andrew
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.95.970209021828.485C-100000>