MCPcopy Create free account
hub / github.com/apple/foundationdb / alignReserve

Method alignReserve

fdbserver/DiskQueue.actor.cpp:81–106  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

79 return result;
80 }
81 void alignReserve(int alignment, int size) {
82 ASSERT(alignment && (alignment & (alignment - 1)) == 0); // alignment is a power of two
83
84 if (size >= reserved) {
85 // SOMEDAY: Use a new arena and discard the old one after copying?
86 reserved = std::max(size, reserved * 2);
87 if (reserved > 1e9) {
88 printf("WOAH! Huge allocation\n");
89 TraceEvent(SevError, "StringBufferHugeAllocation", id)
90 .detail("Alignment", alignment)
91 .detail("Reserved", reserved)
92 .backtrace();
93 }
94 uint8_t* b = new (str.arena()) uint8_t[reserved + alignment - 1];
95 uint8_t* e = b + (reserved + alignment - 1);
96
97 uint8_t* p = (uint8_t*)(int64_t(b + alignment - 1) &
98 ~(alignment - 1)); // first multiple of alignment greater than or equal to b
99 ASSERT(p >= b && p + reserved <= e && int64_t(p) % alignment == 0);
100
101 if (str.size() > 0) {
102 memcpy(p, str.begin(), str.size());
103 }
104 str.contents() = StringRef(p, str.size());
105 }
106 }
107};
108
109struct SyncQueue : ReferenceCounted<SyncQueue> {

Callers 2

fillReadingBufferMethod · 0.80
addEmptyPageMethod · 0.80

Calls 7

printfFunction · 0.85
TraceEventClass · 0.85
memcpyFunction · 0.85
detailMethod · 0.80
StringRefClass · 0.50
sizeMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected