diff --git a/src/servers/registrar/MessageDeliverer.cpp b/src/servers/registrar/MessageDeliverer.cpp index ff409f5c08..4ba6737a5e 100644 --- a/src/servers/registrar/MessageDeliverer.cpp +++ b/src/servers/registrar/MessageDeliverer.cpp @@ -10,10 +10,10 @@ #include #include -#include #include #include #include +#include #include #include @@ -603,14 +603,16 @@ MessageDeliverer::DeliverMessage(BMessage *message, MessagingTargetSet &targets, if (message == NULL) return B_BAD_VALUE; - // flatten the message - BMallocIO mallocIO; - status_t error = message->Flatten(&mallocIO, NULL); + ssize_t size = message->FlattenedSize(); + BStackOrHeapArray buffer(size); + if (!buffer.IsValid()) + return B_NO_MEMORY; + + status_t error = message->Flatten(buffer, size); if (error < B_OK) return error; - return DeliverMessage(mallocIO.Buffer(), mallocIO.BufferLength(), targets, - timeout); + return DeliverMessage(buffer, size, targets, timeout); }