Skip to content

Commit

Permalink
Changed ArenaBlockRef to use 32 bit aligned4kBuffer size.
Browse files Browse the repository at this point in the history
  • Loading branch information
sfc-gh-satherton committed May 16, 2021
1 parent bd0c4a4 commit a31e4f6
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 9 deletions.
10 changes: 5 additions & 5 deletions flow/Arena.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ void Arena::dependsOn(const Arena& p) {
}
}

void* Arena::allocate4kAlignedBuffer(size_t size) {
void* Arena::allocate4kAlignedBuffer(uint32_t size) {
return ArenaBlock::dependOn4kAlignedBuffer(impl, size);
}

Expand Down Expand Up @@ -234,12 +234,12 @@ void ArenaBlock::makeReference(ArenaBlock* next) {
bigUsed += sizeof(ArenaBlockRef);
}

void* ArenaBlock::make4kAlignedBuffer(size_t size) {
void* ArenaBlock::make4kAlignedBuffer(uint32_t size) {
ArenaBlockRef* r = (ArenaBlockRef*)((char*)getData() + bigUsed);
makeDefined(r, sizeof(ArenaBlockRef));
r->aligned4kBufferSize = size;
r->aligned4kBuffer = allocateFast4kAligned(size);
//printf("Arena::aligned4kBuffer alloc size=%u ptr=%p\n", size, r->aligned4kBuffer);
// printf("Arena::aligned4kBuffer alloc size=%u ptr=%p\n", size, r->aligned4kBuffer);
r->nextBlockOffset = nextBlockOffset;
makeNoAccess(r, sizeof(ArenaBlockRef));
nextBlockOffset = bigUsed;
Expand All @@ -255,7 +255,7 @@ void ArenaBlock::dependOn(Reference<ArenaBlock>& self, ArenaBlock* other) {
self->makeReference(other);
}

void* ArenaBlock::dependOn4kAlignedBuffer(Reference<ArenaBlock>& self, size_t size) {
void* ArenaBlock::dependOn4kAlignedBuffer(Reference<ArenaBlock>& self, uint32_t size) {
if (!self || self->isTiny() || self->unused() < sizeof(ArenaBlockRef)) {
return create(SMALL, self)->make4kAlignedBuffer(size);
} else {
Expand Down Expand Up @@ -398,7 +398,7 @@ void ArenaBlock::destroy() {

// If aligned4kBuffer is valid, free it
if (br->aligned4kBufferSize != 0) {
//printf("Arena::aligned4kBuffer free %p\n", br->aligned4kBuffer);
// printf("Arena::aligned4kBuffer free %p\n", br->aligned4kBuffer);
freeFast4kAligned(br->aligned4kBufferSize, br->aligned4kBuffer);
} else {
allowAccess(br->next);
Expand Down
8 changes: 4 additions & 4 deletions flow/Arena.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ class Arena {
Arena& operator=(Arena&&) noexcept;

void dependsOn(const Arena& p);
void* allocate4kAlignedBuffer(size_t size);
void* allocate4kAlignedBuffer(uint32_t size);
size_t getSize() const;

bool hasFree(size_t size, const void* address);
Expand Down Expand Up @@ -132,7 +132,7 @@ struct scalar_traits<Arena> : std::true_type {
struct ArenaBlockRef {
// Only one of (next, aligned4kBuffer) are valid at any one time, as they occupy the same space.
// If aligned4kBufferSize is not 0, aligned4kBuffer is valid, otherwise next is valid.
size_t aligned4kBufferSize;
uint32_t aligned4kBufferSize;
union {
ArenaBlock* next;
void* aligned4kBuffer;
Expand Down Expand Up @@ -167,9 +167,9 @@ struct ArenaBlock : NonCopyable, ThreadSafeReferenceCounted<ArenaBlock> {
void getUniqueBlocks(std::set<ArenaBlock*>& a);
int addUsed(int bytes);
void makeReference(ArenaBlock* next);
void* make4kAlignedBuffer(size_t size);
void* make4kAlignedBuffer(uint32_t size);
static void dependOn(Reference<ArenaBlock>& self, ArenaBlock* other);
static void* dependOn4kAlignedBuffer(Reference<ArenaBlock>& self, size_t size);
static void* dependOn4kAlignedBuffer(Reference<ArenaBlock>& self, uint32_t size);
static void* allocate(Reference<ArenaBlock>& self, int bytes);
// Return an appropriately-sized ArenaBlock to store the given data
static ArenaBlock* create(int dataSize, Reference<ArenaBlock>& next);
Expand Down

0 comments on commit a31e4f6

Please sign in to comment.