From @VM1.NODAK.EDU:owner-lines-l@VM1.NODAK.EDU Thu Jan 20 18:49:53 1994 Received: Thu, 20 Jan 94 18:49:52 EST from STSCI.EDU by hydra.stsci.edu (4.1) Received: Thu, 20 Jan 94 18:49:12 EST from VM1.NoDak.EDU by stsci.edu (4.1) Message-Id: <9401202349.AA27859@STSCI.EDU> Received: from VM1.NODAK.EDU by VM1.NoDak.EDU (IBM VM SMTP V2R2) with BSMTP id 7440; Thu, 20 Jan 94 17:16:02 CST Received: from VM1.NODAK.EDU (NJE origin LISTSERV@NDSUVM1) by VM1.NODAK.EDU (LMail V1.1d/1.7f) with BSMTP id 3531; Thu, 20 Jan 1994 16:39:22 -0600 Date: Thu, 20 Jan 1994 14:40:00 EST Reply-To: LifeLines Genealogical System Sender: LifeLines Genealogical System From: Thomas Wetmore Subject: Patch to 2.3.6 To: Multiple recipients of list LINES-L Status: RO Content-Length: 1843 X-Lines: 42 Liners, Darn how I hate this. For the past week I have been helping a fellow in Norway port LL to the NeXT system. The building of the executable went through the normal pains of curses and ANSI warnings, but was straightforward, kind of. However, the executable frequently and frustratingly dumps core at many seemingly random and innocuous points. The "long distance" debugging of the problem has been tortuously slow, but a serious bug has emerged. It has lain dormant for years, awaiting the NeXT method of dynamic memory allocation. Since this problem has never shown up before, I am not going to release a 2.3.7 with the fix. It will simply go into the 3.x.x series. However, I am distributing the culprit routine so those of you who have an interest or need can make the change. The bug is significant, a typical C hanging pointer bug. It hasn't shown up simply because all our memory allocators seem to return the most recently freed memory block of the same size when allocation occurs. The NeXT must not. The routine is in the file liflines/abbrev.c Tom Wetmore thomas.wetmore@att.com - - - - - - - - - - - - - - - - - /*================================================================== * init_abbvtab_from_rec -- Initialize an abbrevtable from an abbrev * table in the database. *=================================================================*/ BOOLEAN init_abbvtab_from_rec (key, tab) STRING key; /* key of abbrv table */ TABLE tab; /* hash table to hold abbrevs */ { INT len; STRING rec; BOOLEAN rc; if (!tab) return FALSE; if (!(rec = retrieve_record(key, &len))) return FALSE; rc = init_abbvtab_from_string(rec, tab); stdfree(rec); return rc; }