summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmilian Peev <epeev@google.com>2017-09-22 13:53:49 +0100
committerEmilian Peev <epeev@google.com>2017-09-22 13:53:49 +0100
commit9f6e6392f6e7e0b9e219f2861547b78e4c385146 (patch)
tree6dc05814a698b710a109751bd01d2bcb20562329
parentc7b986758b2dfc426c0a5babf9bfadf49ac41c93 (diff)
downloadangler-9f6e6392f6e7e0b9e219f2861547b78e4c385146.tar.gz
QCamera2: HAL3: Avoid race condition during HFR video stop
The video stream stop sequence can encounter a race conidtion in case pending buffers arrive during the same time frame. Any incoming stream callbacks that manage to execute during the window between 'mDataQ' flush and 'flushFreeBatchBufQ' will modify the 'mBufsStaged' counter without the knowledge of the top 'QCamera3HardwareInterface' instance. This makes subsequent calls 'aggregateBufToBatch' prone to batch overflow errors. To resolve this, call 'flushFreeBatchBufQ' before flushing 'mDataQ'. This way calls to 'aggregateBufToBatch' from failing stream callbacks should not be successfull in modifiying 'mBufsStaged'. Bug: 65549208 Test: Camera CTS Change-Id: I0dbb2488530ea8d684c50c741e3b26d272f6ba46
-rw-r--r--camera/QCamera2/HAL3/QCamera3Stream.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/camera/QCamera2/HAL3/QCamera3Stream.cpp b/camera/QCamera2/HAL3/QCamera3Stream.cpp
index 399e73d..e87d1ec 100644
--- a/camera/QCamera2/HAL3/QCamera3Stream.cpp
+++ b/camera/QCamera2/HAL3/QCamera3Stream.cpp
@@ -588,9 +588,9 @@ void *QCamera3Stream::dataProcRoutine(void *data)
break;
case CAMERA_CMD_TYPE_EXIT:
CDBG_HIGH("%s: Exit", __func__);
+ pme->flushFreeBatchBufQ();
/* flush data buf queue */
pme->mDataQ.flush();
- pme->flushFreeBatchBufQ();
running = 0;
break;
default: