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:
parent
33f066d24c
commit
076a184bb0
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user