Skip to content

Commit deae102

Browse files
Morel BérengerAntoine Fontaine
authored andcommitted
improve SendMsg performances by avoiding malloc calls
Measurements done by instrumenting the code shows a ~17% performance improvement on that function. time calls time/calls patched 209635243 12242 17124,264 not patched 167909532 8198 20481,768
1 parent 8741a27 commit deae102

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

src/common/IPC/Primitives.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ static void InternalSendMsg(Sys::OSHandle handle, bool more, const FileDesc* han
234234
}
235235
#else
236236
size_t descBytes = 0;
237-
std::unique_ptr<unsigned char[]> descBuffer;
237+
static std::unique_ptr<unsigned char[]> descBuffer;
238+
static size_t descBufferSize = 0;
238239
if (numHandles != 0) {
239240
for (size_t i = 0; i < numHandles; i++) {
240241
// tag: 1 byte
@@ -250,7 +251,10 @@ static void InternalSendMsg(Sys::OSHandle handle, bool more, const FileDesc* han
250251
// Add 1 byte end tag and round to 16 bytes
251252
descBytes = (descBytes + 1 + 0xf) & ~0xf;
252253

253-
descBuffer.reset(new unsigned char[descBytes]);
254+
if (descBufferSize < descBytes) {
255+
descBufferSize = descBytes;
256+
descBuffer.reset(new unsigned char[descBytes]);
257+
}
254258
unsigned char* descBuffer_ptr = &descBuffer[0];
255259
for (size_t i = 0; i < numHandles; i++) {
256260
*descBuffer_ptr++ = handles[i].type;

0 commit comments

Comments
 (0)