diff --git a/libcamera2/ExynosCameraHWInterface2.cpp b/libcamera2/ExynosCameraHWInterface2.cpp
index 8f4f5cd..b372c8c 100644
--- a/libcamera2/ExynosCameraHWInterface2.cpp
+++ b/libcamera2/ExynosCameraHWInterface2.cpp
@@ -309,6 +309,7 @@
 void RequestManager::ResetEntry()
 {
     Mutex::Autolock lock(m_requestMutex);
+    Mutex::Autolock lock2(m_numOfEntriesLock);
     for (int i=0 ; i<NUM_MAX_REQUEST_MGR_ENTRY; i++) {
         memset(&(entries[i]), 0x00, sizeof(request_manager_entry_t));
         entries[i].internal_shot.shot.ctl.request.frameCount = -1;
@@ -321,6 +322,7 @@
 
 int RequestManager::GetNumEntries()
 {
+    Mutex::Autolock lock(m_numOfEntriesLock);
     return m_numOfEntries;
 }
 
@@ -332,6 +334,7 @@
 bool RequestManager::IsRequestQueueFull()
 {
     Mutex::Autolock lock(m_requestMutex);
+    Mutex::Autolock lock2(m_numOfEntriesLock);
     if (m_numOfEntries>=NUM_MAX_REQUEST_MGR_ENTRY)
         return true;
     else
@@ -343,6 +346,7 @@
     ALOGV("DEBUG(%s):", __FUNCTION__);
 
     Mutex::Autolock lock(m_requestMutex);
+    Mutex::Autolock lock2(m_numOfEntriesLock);
 
     request_manager_entry * newEntry = NULL;
     int newInsertionIndex = GetNextIndex(m_entryInsertionIndex);
@@ -386,6 +390,7 @@
     request_manager_entry * currentEntry;
 
     Mutex::Autolock lock(m_requestMutex);
+    Mutex::Autolock lock2(m_numOfEntriesLock);
 
     frame_index = GetCompletedIndex();
     currentEntry =  &(entries[frame_index]);
@@ -454,6 +459,7 @@
     static int count = 0;
 
     Mutex::Autolock lock(m_requestMutex);
+    Mutex::Autolock lock2(m_numOfEntriesLock);
     if (m_numOfEntries == 0)  {
         CAM_LOGD("DEBUG(%s): Request Manager Empty ", __FUNCTION__);
         return -1;
@@ -899,6 +905,7 @@
 {
     int i = 0;
     request_manager_entry * currentEntry;
+    Mutex::Autolock lock(m_numOfEntriesLock);
     ALOGD("## Dump  totalentry(%d), insert(%d), processing(%d), frame(%d)",
     m_numOfEntries,m_entryInsertionIndex,m_entryProcessingIndex, m_entryFrameOutputIndex);
 
@@ -1623,10 +1630,17 @@
 
 int ExynosCameraHWInterface2::getInProgressCount()
 {
-    int inProgressCount = m_requestManager->GetNumEntries();
+    int inProgressJpeg;
+    int inProgressCount;
+
+    {
+        Mutex::Autolock lock(m_jpegEncoderLock);
+        inProgressJpeg = m_jpegEncodingCount;
+        inProgressCount = m_requestManager->GetNumEntries();
+    }
     ALOGV("DEBUG(%s): # of dequeued req (%d) jpeg(%d) = (%d)", __FUNCTION__,
-        inProgressCount, m_jpegEncodingCount, (inProgressCount + m_jpegEncodingCount));
-    return (inProgressCount + m_jpegEncodingCount);
+        inProgressCount, inProgressJpeg, (inProgressCount + inProgressJpeg));
+    return (inProgressCount + inProgressJpeg);
 }
 
 int ExynosCameraHWInterface2::flushCapturesInProgress()
@@ -4129,7 +4143,6 @@
 }
 int ExynosCameraHWInterface2::m_jpegCreator(StreamThread *selfThread, ExynosBuffer *srcImageBuf, nsecs_t frameTimeStamp)
 {
-    Mutex::Autolock lock(m_jpegEncoderLock);
     stream_parameters_t     *selfStreamParms = &(selfThread->m_parameters);
     substream_parameters_t  *subParms        = &m_subStreams[STREAM_ID_JPEG];
     status_t    res;
@@ -4161,7 +4174,10 @@
         return 1;
     }
 
-    m_jpegEncodingCount++;
+    {
+        Mutex::Autolock lock(m_jpegEncoderLock);
+        m_jpegEncodingCount++;
+    }
 
     m_getRatioSize(selfStreamParms->width, selfStreamParms->height,
                     m_streamThreads[0]->m_parameters.width, m_streamThreads[0]->m_parameters.height,
@@ -4325,7 +4341,10 @@
                 subParms->svcBufIndex,  subParms->svcBufStatus[subParms->svcBufIndex]);
         }
     }
-    m_jpegEncodingCount--;
+    {
+        Mutex::Autolock lock(m_jpegEncoderLock);
+        m_jpegEncodingCount--;
+    }
     return 0;
 }
 
diff --git a/libcamera2/ExynosCameraHWInterface2.h b/libcamera2/ExynosCameraHWInterface2.h
index 027322f..b54d77a 100644
--- a/libcamera2/ExynosCameraHWInterface2.h
+++ b/libcamera2/ExynosCameraHWInterface2.h
@@ -315,6 +315,7 @@
 
     MetadataConverter               *m_metadataConverter;
     SignalDrivenThread              *m_mainThread;
+    Mutex                           m_numOfEntriesLock;
     int                             m_numOfEntries;
     int                             m_entryInsertionIndex;
     int                             m_entryProcessingIndex;
