diff --git a/lib/ReaderImpl.cc b/lib/ReaderImpl.cc index 7fa7e8b9..f489013b 100644 --- a/lib/ReaderImpl.cc +++ b/lib/ReaderImpl.cc @@ -104,15 +104,18 @@ void ReaderImpl::start(const MessageId& startMessageId, consumer_ = consumerImpl; } auto self = shared_from_this(); + auto readerCreatedCallback = readerCreatedCallback_; consumer_->getConsumerCreatedFuture().addListener( - [this, self, callback](Result result, const ConsumerImplBaseWeakPtr& weakConsumerPtr) { + [this, self, callback, readerCreatedCallback](Result result, + const ConsumerImplBaseWeakPtr& weakConsumerPtr) { if (result == ResultOk) { callback(weakConsumerPtr); - readerCreatedCallback_(result, Reader(self)); + readerCreatedCallback(result, Reader(self)); } else { - readerCreatedCallback_(result, {}); + readerCreatedCallback(result, {}); } }); + readerCreatedCallback_ = nullptr; consumer_->start(); } diff --git a/lib/Utils.h b/lib/Utils.h index 5aab7159..af374f29 100644 --- a/lib/Utils.h +++ b/lib/Utils.h @@ -38,9 +38,9 @@ struct WaitForCallback { template struct WaitForCallbackValue { - Promise& m_promise; + Promise m_promise; - WaitForCallbackValue(Promise& promise) : m_promise(promise) {} + WaitForCallbackValue(Promise promise) : m_promise(promise) {} void operator()(Result result, const T& value) { if (result == ResultOk) {