1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-03-13 18:31:31 -07:00

Eliminating dodgy use of *segprefdefault() which could lead to implicit calls to memcpy.

Copied from Perforce
 Change: 184217
 ServerID: perforce.ravenbrook.com
This commit is contained in:
Richard Brooksby 2014-01-29 15:13:22 +00:00
parent f719851f50
commit 8e4e0f066e
7 changed files with 16 additions and 6 deletions

View file

@ -261,11 +261,13 @@ static void testAllocAndIterate(Arena arena, Pool pool,
AllocatorClass allocator)
{
AllocInfoStruct offsetRegion, gapRegion, newRegion, topRegion;
SegPrefStruct pref = *SegPrefDefault();
SegPrefStruct pref;
Count offset, gap, new;
ZoneSet zone = (ZoneSet)2;
int i;
SegPrefInit(&pref);
/* Testing the behaviour with various sizes of gaps in the page table. */
/* Assume the allocation strategy is first-fit. The idea of the tests is */

View file

@ -39,6 +39,13 @@ SegPref SegPrefDefault(void)
return &segPrefDefault;
}
/* SegPrefInit -- initialise a segment preference to the defaults */
void SegPrefInit(SegPref pref)
{
mps_lib_memcpy(pref, &segPrefDefault, sizeof(SegPrefStruct));
}
/* SegPrefExpress -- express a segment preference */
@ -253,7 +260,7 @@ Res ChainAlloc(Seg *segReturn, Chain chain, Serial genNr, SegClass class,
else
zones = arena->topGen.zones;
pref = *SegPrefDefault(); /* FIXME: Ugh. Should have SegPrefInit. */
SegPrefInit(&pref);
SegPrefExpress(&pref, SegPrefCollected, NULL);
SegPrefExpress(&pref, SegPrefZoneSet, &zones);
res = SegAlloc(&seg, class, &pref, size, pool, withReservoirPermit, args);

View file

@ -626,6 +626,7 @@ extern Res ArenaNoExtend(Arena arena, Addr base, Size size);
extern Bool SegPrefCheck(SegPref pref);
extern SegPref SegPrefDefault(void);
extern void SegPrefInit(SegPref pref);
extern void SegPrefExpress(SegPref pref, SegPrefKind kind, void *p);
extern void LocusInit(Arena arena);

View file

@ -954,7 +954,7 @@ static Res AMSBufferFill(Addr *baseReturn, Addr *limitReturn,
}
/* No suitable segment found; make a new one. */
segPrefStruct = *SegPrefDefault();
SegPrefInit(&segPrefStruct);
SegPrefExpress(&segPrefStruct, SegPrefCollected, NULL);
res = AMSSegCreate(&seg, pool, size, &segPrefStruct, rankSet,
withReservoirPermit);

View file

@ -290,7 +290,7 @@ static Res MVTInit(Pool pool, ArgList args)
{
ZoneSet zones;
/* --- Loci needed here, what should the pref be? */
*MVTSegPref(mvt) = *SegPrefDefault();
SegPrefInit(MVTSegPref(mvt));
zones = ZoneSetComp(ArenaDefaultZONESET);
SegPrefExpress(MVTSegPref(mvt), SegPrefZoneSet, (void *)&zones);
}

View file

@ -593,7 +593,7 @@ static Res MVFFInit(Pool pool, ArgList args)
return res;
mvff->segPref = (SegPref)p;
*mvff->segPref = *SegPrefDefault();
SegPrefInit(mvff->segPref);
SegPrefExpress(mvff->segPref, arenaHigh ? SegPrefHigh : SegPrefLow, NULL);
/* If using zoneset placement, just put it apart from the others. */
zones = ZoneSetComp(ArenaDefaultZONESET);

View file

@ -391,7 +391,7 @@ static Res SNCInit(Pool pool, ArgList args)
snc->freeSegs = NULL;
/* Use the default segpref for the pool. At least this should avoid */
/* clashes with collected pools */
snc->segPrefStruct = *SegPrefDefault();
SegPrefInit(&snc->segPrefStruct);
snc->sig = SNCSig;
AVERT(SNC, snc);