Camera2: Implement semaphore with mutex and condition.
POSIX semaphore is not used or well tested on Android.
Implement it using mutex and conditional variable instead.
Change-Id: I480aa69a682821674aa95ff58f40a3b90a8714bc
diff --git a/QCamera2/HAL/QCameraStateMachine.cpp b/QCamera2/HAL/QCameraStateMachine.cpp
index f5b8298..d051a51 100644
--- a/QCamera2/HAL/QCameraStateMachine.cpp
+++ b/QCamera2/HAL/QCameraStateMachine.cpp
@@ -55,9 +55,9 @@
ALOGD("%s: E", __func__);
do {
do {
- ret = sem_wait(&pme->cmd_sem);
+ ret = cam_sem_wait(&pme->cmd_sem);
if (ret != 0 && errno != EINVAL) {
- ALOGE("%s: sem_wait error (%s)",
+ ALOGE("%s: cam_sem_wait error (%s)",
__func__, strerror(errno));
return NULL;
}
@@ -115,7 +115,7 @@
m_parent = ctrl;
m_state = QCAMERA_SM_STATE_PREVIEW_STOPPED;
cmd_pid = 0;
- sem_init(&cmd_sem, 0, 0);
+ cam_sem_init(&cmd_sem, 0);
pthread_create(&cmd_pid,
NULL,
smEvtProcRoutine,
@@ -141,7 +141,7 @@
node->cmd = QCAMERA_SM_CMD_TYPE_EXIT;
api_queue.enqueue((void *)node);
- sem_post(&cmd_sem);
+ cam_sem_post(&cmd_sem);
/* wait until cmd thread exits */
if (pthread_join(cmd_pid, NULL) != 0) {
@@ -150,7 +150,7 @@
}
cmd_pid = 0;
}
- sem_destroy(&cmd_sem);
+ cam_sem_destroy(&cmd_sem);
}
/*===========================================================================
@@ -181,7 +181,7 @@
node->evt = evt;
node->evt_payload = api_payload;
if (api_queue.enqueue((void *)node)) {
- sem_post(&cmd_sem);
+ cam_sem_post(&cmd_sem);
return NO_ERROR;
} else {
free(node);
@@ -218,7 +218,7 @@
node->evt = evt;
node->evt_payload = evt_payload;
if (evt_queue.enqueue((void *)node)) {
- sem_post(&cmd_sem);
+ cam_sem_post(&cmd_sem);
return NO_ERROR;
} else {
free(node);