diff --git a/src/media/audio/ringbuffer.cpp b/src/media/audio/ringbuffer.cpp
index c1074301a1f0401d51d3bade980c97547814cc0e..b3859f6bb305b22519d60f6dc02eab45e77da00a 100644
--- a/src/media/audio/ringbuffer.cpp
+++ b/src/media/audio/ringbuffer.cpp
@@ -163,6 +163,7 @@ RingBuffer::hasNoReadOffsets() const
 void
 RingBuffer::put(std::shared_ptr<AudioFrame>&& data)
 {
+    std::lock_guard<std::mutex> l(writeLock_);
     resizer_.enqueue(resampler_.resample(std::move(data), format_));
 }
 
diff --git a/src/media/audio/ringbuffer.h b/src/media/audio/ringbuffer.h
index 3b09644f9e8d53e1782d966fd1a44e93b20ced3f..de6ea39914577ad4822db2d8b8f63e24888d5f80 100644
--- a/src/media/audio/ringbuffer.h
+++ b/src/media/audio/ringbuffer.h
@@ -72,6 +72,7 @@ public:
 
     inline void setFormat(const AudioFormat& format)
     {
+        std::lock_guard<std::mutex> l(writeLock_);
         format_ = format;
         resizer_.setFormat(format, format.sample_rate / 50);
     }
@@ -201,6 +202,7 @@ private:
 
     mutable std::mutex lock_;
     mutable std::condition_variable not_empty_;
+    std::mutex writeLock_;
 
     ReadOffsetMap readoffsets_;