3737#include < unordered_set>
3838#include < unordered_map>
3939#include < map>
40- #include < boost/thread/mutex.hpp>
41- #include < boost/thread/shared_mutex.hpp>
40+ #include < mutex>
4241#include < atomic>
4342#include < boost/optional.hpp>
4443#include " ../producer.h"
@@ -190,8 +189,7 @@ class CPPKAFKA_API BufferedProducer {
190189
191190 Producer producer_;
192191 QueueType messages_;
193- mutable boost::mutex exclusive_access_;
194- mutable boost::shared_mutex shared_access_;
192+ mutable std::mutex mutex_;
195193 ProduceFailureCallback produce_failure_callback_;
196194 std::atomic_ulong expected_acks_{0 };
197195 std::atomic_ullong total_messages_acked_{0 };
@@ -221,14 +219,14 @@ void BufferedProducer<BufferType>::produce(const MessageBuilder& builder) {
221219
222220template <typename BufferType>
223221void BufferedProducer<BufferType>::flush() {
224- {
225- boost::shared_lock<boost::shared_mutex> grant (shared_access_);
226- size_t num_messages = messages_.size ();
227- while (num_messages--) {
228- produce_message (messages_.front ());
229- boost::lock_guard<boost::mutex> require (exclusive_access_);
230- messages_.pop ();
222+ size_t num_messages = messages_.size ();
223+ while (num_messages--) {
224+ std::lock_guard<std::mutex> lock (mutex_);
225+ if (messages_.empty ()) {
226+ break ; // perhaps clear() was called
231227 }
228+ produce_message (messages_.front ());
229+ messages_.pop ();
232230 }
233231 wait_for_acks ();
234232}
@@ -253,16 +251,15 @@ void BufferedProducer<BufferType>::wait_for_acks() {
253251
254252template <typename BufferType>
255253void BufferedProducer<BufferType>::clear() {
256- boost::unique_lock<boost::shared_mutex> restrict (shared_access_ );
254+ std::lock_guard<std::mutex> lock (mutex_ );
257255 QueueType tmp;
258256 std::swap (tmp, messages_);
259257}
260258
261259template <typename BufferType>
262260template <typename BuilderType>
263261void BufferedProducer<BufferType>::do_add_message(BuilderType&& builder) {
264- boost::shared_lock<boost::shared_mutex> grant (shared_access_);
265- boost::lock_guard<boost::mutex> require (exclusive_access_);
262+ std::lock_guard<std::mutex> lock (mutex_);
266263 messages_.push (std::move (builder));
267264}
268265
0 commit comments