diff --git a/src/media/video/sinkclient.cpp b/src/media/video/sinkclient.cpp
index b147d73d427fe2fe5dabb20b5276701d7faeb053..3c2d4c3a2d7bd629269aac07e26a404e385e1e26 100644
--- a/src/media/video/sinkclient.cpp
+++ b/src/media/video/sinkclient.cpp
@@ -157,8 +157,11 @@ ShmHolder::~ShmHolder()
     if (area_ == MAP_FAILED)
         return;
 
+    ::sem_wait(&area_->mutex);
     area_->frameSize = 0;
-    ::sem_post(&area_->frameGenMutex);
+    ::sem_post(&area_->mutex);
+
+    ::sem_post(&area_->frameGenMutex); // unlock waiting client before leaving
     unMapShmArea();
 }