PR/5690: Wolfgang Rupprecht: deleting a suffix that has 0 source references

causes core-dump. Fix: when an unused suffix gets removed, delete
	 it from the suffix list.
This commit is contained in:
christos 1998-07-02 23:30:18 +00:00
parent 33f066d24c
commit 076a184bb0

View File

@ -1,4 +1,4 @@
/* $NetBSD: suff.c,v 1.18 1997/09/28 03:31:11 lukem Exp $ */ /* $NetBSD: suff.c,v 1.19 1998/07/02 23:30:18 christos Exp $ */
/* /*
* Copyright (c) 1988, 1989, 1990, 1993 * Copyright (c) 1988, 1989, 1990, 1993
@ -39,14 +39,14 @@
*/ */
#ifdef MAKE_BOOTSTRAP #ifdef MAKE_BOOTSTRAP
static char rcsid[] = "$NetBSD: suff.c,v 1.18 1997/09/28 03:31:11 lukem Exp $"; static char rcsid[] = "$NetBSD: suff.c,v 1.19 1998/07/02 23:30:18 christos Exp $";
#else #else
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
#if 0 #if 0
static char sccsid[] = "@(#)suff.c 8.4 (Berkeley) 3/21/94"; static char sccsid[] = "@(#)suff.c 8.4 (Berkeley) 3/21/94";
#else #else
__RCSID("$NetBSD: suff.c,v 1.18 1997/09/28 03:31:11 lukem Exp $"); __RCSID("$NetBSD: suff.c,v 1.19 1998/07/02 23:30:18 christos Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */
#endif #endif
@ -381,6 +381,13 @@ SuffFree (sp)
if (s == emptySuff) if (s == emptySuff)
emptySuff = NULL; emptySuff = NULL;
#ifdef notdef
/* We don't delete suffixes in order, so we cannot use this */
if (s->refCount)
Punt("Internal error deleting suffix `%s' with refcount = %d", s->name,
s->refCount);
#endif
Lst_Destroy (s->ref, NOFREE); Lst_Destroy (s->ref, NOFREE);
Lst_Destroy (s->children, NOFREE); Lst_Destroy (s->children, NOFREE);
Lst_Destroy (s->parents, NOFREE); Lst_Destroy (s->parents, NOFREE);
@ -409,8 +416,10 @@ SuffRemove(l, s)
Suff *s; Suff *s;
{ {
SuffUnRef((ClientData) l, (ClientData) s); SuffUnRef((ClientData) l, (ClientData) s);
if (s->refCount == 0) if (s->refCount == 0) {
SuffUnRef ((ClientData) sufflist, (ClientData) s);
SuffFree((ClientData) s); SuffFree((ClientData) s);
}
} }
/*- /*-
@ -690,7 +699,7 @@ Suff_EndTransform(gnp, dummy)
(void)SuffParseTransform(gn->name, &s, &t); (void)SuffParseTransform(gn->name, &s, &t);
if (DEBUG(SUFF)) { if (DEBUG(SUFF)) {
printf("deleting transformation from %s to %s\n", printf("deleting transformation from `%s' to `%s'\n",
s->name, t->name); s->name, t->name);
} }