registrar: Use BStackOrHeapArray in MessageDeliverer for flattened messages.
Saves unnecessary allocations (and reallocations).
This commit is contained in:
@@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user