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:
parent
f719851f50
commit
8e4e0f066e
7 changed files with 16 additions and 6 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue