mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-03-26 00:34:17 -07:00
Fix review comments from <https://info.ravenbrook.com/mail/2013/05/28/22-21-11/0/>:
* Rename RangeOverlap to RangesOverlap. * MVFF shouldn't assume that CBSInsert and CBSDelete can't fail. * Remove unused function mps_mvff_stat. * Don't call range methods in RangeCheck. * RangeInit can't fail, so return void. Copied from Perforce Change: 182297 ServerID: perforce.ravenbrook.com
This commit is contained in:
parent
777ba48e81
commit
ae5a06f21b
5 changed files with 22 additions and 37 deletions
|
|
@ -605,7 +605,7 @@ static Bool MVTDeleteOverlapping(ABQDisposition *dispositionReturn,
|
|||
oldRange = element;
|
||||
newRange = closureP;
|
||||
|
||||
if (RangeOverlap(oldRange, newRange)) {
|
||||
if (RangesOverlap(oldRange, newRange)) {
|
||||
*dispositionReturn = ABQDispositionDELETE;
|
||||
} else {
|
||||
*dispositionReturn = ABQDispositionKEEP;
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ typedef MVFFDebugStruct *MVFFDebug;
|
|||
*
|
||||
* Updates MVFF counters for additional free space. Returns maximally
|
||||
* coalesced range containing given range. Does not attempt to free
|
||||
* segments (see MVFFFreeSegs). Cannot(!) fail.
|
||||
* segments (see MVFFFreeSegs).
|
||||
*/
|
||||
static void MVFFAddToFreeList(Addr *baseIO, Addr *limitIO, MVFF mvff) {
|
||||
Res res;
|
||||
|
|
@ -94,6 +94,10 @@ static void MVFFAddToFreeList(Addr *baseIO, Addr *limitIO, MVFF mvff) {
|
|||
AVER(limit > base);
|
||||
|
||||
res = CBSInsert(baseIO, limitIO, CBSOfMVFF(mvff), base, limit);
|
||||
if (ResIsAllocFailure(res))
|
||||
/* CBS ran out of memory for splay nodes: lose freed range. */
|
||||
return;
|
||||
|
||||
AVER(res == ResOK);
|
||||
mvff->free += AddrOffset(base, limit);
|
||||
|
||||
|
|
@ -138,6 +142,10 @@ static void MVFFFreeSegs(MVFF mvff, Addr base, Addr limit)
|
|||
if (segBase >= base) { /* segment starts in range */
|
||||
Addr oldBase, oldLimit;
|
||||
res = CBSDelete(&oldBase, &oldLimit, CBSOfMVFF(mvff), segBase, segLimit);
|
||||
if (ResIsAllocFailure(res))
|
||||
/* CBS ran out of memory for splay nodes: can't delete. */
|
||||
return;
|
||||
|
||||
AVER(res == ResOK);
|
||||
AVER(oldBase <= segBase);
|
||||
AVER(segLimit <= oldLimit);
|
||||
|
|
@ -367,6 +375,10 @@ static Res MVFFBufferFill(Addr *baseReturn, Addr *limitReturn,
|
|||
Addr newBase, newLimit;
|
||||
foundBlock = FALSE;
|
||||
res = CBSInsert(&newBase, &newLimit, CBSOfMVFF(mvff), base, limit);
|
||||
if (ResIsAllocFailure(res))
|
||||
/* CBS ran out of memory for splay nodes: lose block. */
|
||||
return res;
|
||||
|
||||
AVER(newBase == base);
|
||||
AVER(newLimit == limit);
|
||||
AVER(res == ResOK);
|
||||
|
|
@ -722,31 +734,6 @@ static Bool MVFFCheck(MVFF mvff)
|
|||
}
|
||||
|
||||
|
||||
/* mps_mvff_stat -- a hack to get statistics emitted
|
||||
*
|
||||
* .stat: The SW temp pool cannot be destroyed, so we're providing this
|
||||
* to get the statistics. It breaks modularity to access CBS internals.
|
||||
*/
|
||||
|
||||
#include "meter.h"
|
||||
extern void mps_mvff_stat(mps_pool_t pool);
|
||||
|
||||
void mps_mvff_stat(mps_pool_t mps_pool)
|
||||
{
|
||||
Pool pool;
|
||||
MVFF mvff;
|
||||
|
||||
pool = (Pool)mps_pool;
|
||||
AVERT(Pool, pool);
|
||||
mvff = Pool2MVFF(pool);
|
||||
AVERT(MVFF, mvff);
|
||||
|
||||
METER_EMIT(&CBSOfMVFF(mvff)->splaySearch);
|
||||
/* FIXME: METER_EMIT(&CBSOfMVFF(mvff)->eblSearch); */
|
||||
/* FIXME: METER_EMIT(&CBSOfMVFF(mvff)->eglSearch); */
|
||||
}
|
||||
|
||||
|
||||
/* C. COPYRIGHT AND LICENSE
|
||||
*
|
||||
* Copyright (C) 2001-2002 Ravenbrook Limited <http://www.ravenbrook.com/>.
|
||||
|
|
|
|||
|
|
@ -16,14 +16,13 @@ SRCID(range, "$Id$");
|
|||
Bool RangeCheck(Range range)
|
||||
{
|
||||
CHECKS(Range, range);
|
||||
CHECKL(range != NULL);
|
||||
CHECKL(RangeBase(range) != NULL);
|
||||
CHECKL(RangeBase(range) <= RangeLimit(range));
|
||||
CHECKL(range->base != NULL);
|
||||
CHECKL(range->base <= range->limit);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Res RangeInit(Range range, Addr base, Addr limit)
|
||||
void RangeInit(Range range, Addr base, Addr limit)
|
||||
{
|
||||
AVER(range != NULL);
|
||||
AVER(base != NULL);
|
||||
|
|
@ -34,7 +33,6 @@ Res RangeInit(Range range, Addr base, Addr limit)
|
|||
|
||||
range->sig = RangeSig;
|
||||
AVERT(Range, range);
|
||||
return ResOK;
|
||||
}
|
||||
|
||||
void RangeFinish(Range range)
|
||||
|
|
@ -64,7 +62,7 @@ Res RangeDescribe(Range range, mps_lib_FILE *stream)
|
|||
return ResOK;
|
||||
}
|
||||
|
||||
Bool RangeOverlap(Range range1, Range range2)
|
||||
Bool RangesOverlap(Range range1, Range range2)
|
||||
{
|
||||
AVERT(Range, range1);
|
||||
AVERT(Range, range2);
|
||||
|
|
|
|||
|
|
@ -27,12 +27,12 @@ typedef struct RangeStruct *Range;
|
|||
#define RangeLimit(range) ((range)->limit)
|
||||
#define RangeSize(range) (AddrOffset(RangeBase(range), RangeLimit(range)))
|
||||
|
||||
extern Res RangeInit(Range range, Addr base, Addr limit);
|
||||
extern void RangeInit(Range range, Addr base, Addr limit);
|
||||
extern void RangeFinish(Range range);
|
||||
extern Res RangeDescribe(Range range, mps_lib_FILE *stream);
|
||||
extern Bool RangeCheck(Range range);
|
||||
extern Bool RangeIsAligned(Range range, Align align);
|
||||
extern Bool RangeOverlap(Range range1, Range range2);
|
||||
extern Bool RangesOverlap(Range range1, Range range2);
|
||||
extern Addr (RangeBase)(Range range);
|
||||
extern Addr (RangeLimit)(Range range);
|
||||
extern Size (RangeSize)(Range range);
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ Interface
|
|||
inlined in client structures or allocated on the stack. Clients must
|
||||
not depend on its implementation details.
|
||||
|
||||
``Res RangeInit(Range range, Addr base, Addr limit)``
|
||||
``void RangeInit(Range range, Addr base, Addr limit)``
|
||||
|
||||
Initialize a range object to represent the half-open address range
|
||||
between ``base`` (inclusive) and ``limit`` (exclusive). It must be the
|
||||
|
|
@ -72,7 +72,7 @@ there is a function too.)
|
|||
Return the size of the range. (This is implemented as a macro, but
|
||||
there is a function too. The macro evaluates its argument twice.)
|
||||
|
||||
``Bool RangeOverlap(Range range1, Range range2)``
|
||||
``Bool RangesOverlap(Range range1, Range range2)``
|
||||
|
||||
Return ``TRUE`` if the two ranges overlap (have at least one address
|
||||
in common), or ``FALSE`` if they do not. Note that ranges [*A*, *B*) and
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue