registrar: Use BStackOrHeapArray in MessageDeliverer for flattened messages.

Saves unnecessary allocations (and reallocations).
This commit is contained in:
Augustin Cavalier
2025-02-12 16:36:33 -05:00
parent 0f4bfb43ed
commit ff808e1b64
+8 -6
View File
@@ -10,10 +10,10 @@
#include <AutoDeleter.h> #include <AutoDeleter.h>
#include <Autolock.h> #include <Autolock.h>
#include <DataIO.h>
#include <MessagePrivate.h> #include <MessagePrivate.h>
#include <MessengerPrivate.h> #include <MessengerPrivate.h>
#include <OS.h> #include <OS.h>
#include <StackOrHeapArray.h>
#include <TokenSpace.h> #include <TokenSpace.h>
#include <util/DoublyLinkedList.h> #include <util/DoublyLinkedList.h>
@@ -603,14 +603,16 @@ MessageDeliverer::DeliverMessage(BMessage *message, MessagingTargetSet &targets,
if (message == NULL) if (message == NULL)
return B_BAD_VALUE; return B_BAD_VALUE;
// flatten the message ssize_t size = message->FlattenedSize();
BMallocIO mallocIO; BStackOrHeapArray<char, 4096> buffer(size);
status_t error = message->Flatten(&mallocIO, NULL); if (!buffer.IsValid())
return B_NO_MEMORY;
status_t error = message->Flatten(buffer, size);
if (error < B_OK) if (error < B_OK)
return error; return error;
return DeliverMessage(mallocIO.Buffer(), mallocIO.BufferLength(), targets, return DeliverMessage(buffer, size, targets, timeout);
timeout);
} }