diff --git a/src/media/audio/opensl/audio_player.cpp b/src/media/audio/opensl/audio_player.cpp
index 4946290eacfd27fbc5be4eaea3098824499adc7f..57acc75d7e9f54dcbb5805fa2e52c26e802d4861 100644
--- a/src/media/audio/opensl/audio_player.cpp
+++ b/src/media/audio/opensl/audio_player.cpp
@@ -41,10 +41,13 @@ bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void* ctx)
 {
     (static_cast<AudioPlayer*>(ctx))->processSLCallback(bq);
 }
+
 void
 AudioPlayer::processSLCallback(SLAndroidSimpleBufferQueueItf bq)
 {
-    std::lock_guard<std::mutex> lk(m_);
+    std::unique_lock<std::mutex> lk(m_, std::defer_lock);
+    if (!lk.try_lock())
+        return;
 
     // retrieve the finished device buf and put onto the free queue
     // so recorder could re-use it