Yes, my `sizeof(char*)` was really not a good one :)

--
Matteo Merli
<mme...@apache.org>

On Thu, May 13, 2021 at 9:59 AM Marco Guest <marcogues...@gmail.com> wrote:
>
> Hi,
> it worked this way:
>
> ===
> char* payload = new char[1024];
> Message msg = MessageBuilder()
>                   .setAllocatedContent(payload, 1024)
>                   .build();
> producer.sendAsync(msg, [p = payload](Result res, const MessageId& messageId) 
> {
>     if (res == ResultOk) {
>         // message was published correctly
>     } else {
>         // publish error
>     }
>     delete[] p;
> });
> ===
>
> Thank you for the suggestion
>
>
> Il giorno gio 6 mag 2021 alle ore 22:14 Matteo Merli <mme...@apache.org> ha 
> scritto:
>>
>> Hi,
>>
>> the custom deallocator is actually an interesting idea, though the
>> general pattern to deallocate the memory is something like:
>>
>> ===
>>
>> char* payload = new char[1024];
>> Message msg = MessageBuilder()
>>                   .setAllocatedContent(payload, sizeof(payload))
>>                   .build();
>> producer.sendAsync(msg, [&](Result res, const MessageId& messageId) {
>>     if (res == ResultOk) {
>>         // message was published correctly
>>     } else {
>>         // publish error
>>     }
>>     delete[] payload;
>> });
>> ===
>>
>> Does that work for you?
>>
>>
>> --
>> Matteo Merli
>> <mme...@apache.org>
>>
>>
>> On Thu, May 6, 2021 at 5:48 AM Marco Guest <marcogues...@gmail.com> wrote:
>> >
>> > Hi,
>> > I am implementing a message exchange between C++ applications using Pulsar 
>> > technology.
>> > To improve performances I would like to avoid copying my application data 
>> > when creating a new Pulsar::Message.
>> > For this reason I would like to use 
>> > pulsar::MessageBuilder::setAllocatedContent().
>> > However I’m in trouble currently because I don’t have a way to specify to 
>> > pulsar-client-cpp how to deallocate the buffer provided to 
>> > setAllocatedContent().
>> >
>> > Moreover the current documentation is a bit unclear about this aspect:
>> >   “The caller is responsible to ensure the memory buffer is valid until 
>> > the message has been persisted (or an error is returned).”
>> > It’s not clear honestly when the message “has been persisted” in my 
>> > opinion given that the underlying PulsarMessageImpl is a refcounted data 
>> > structure and so it’s hard to tell when its refcount goes to zero (e.g. 
>> > imagine some Pulsar::Message being saved into some data structure for 
>> > later use).
>> >
>> > Would you accept a patch that expands the arguments of 
>> > pulsar::MessageBuilder::setAllocatedContent() by taking a deallocation 
>> > function pointer as well?
>> >
>> > Thanks,
>> > Marco
>> >

Reply via email to