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 >> >