MultiHal multithreaded polling

Change-Id: I3ebe380169eed1c8deeca2860d1788be6c14837e
diff --git a/modules/sensors/SensorEventQueue.cpp b/modules/sensors/SensorEventQueue.cpp
index c139944..00013de 100644
--- a/modules/sensors/SensorEventQueue.cpp
+++ b/modules/sensors/SensorEventQueue.cpp
@@ -17,55 +17,28 @@
 #include <hardware/sensors.h>
 #include <algorithm>
 #include <pthread.h>
-
 #include <linux/input.h>
-#include <cutils/atomic.h>
 #include <cutils/log.h>
 
 #include "SensorEventQueue.h"
 
 SensorEventQueue::SensorEventQueue(int capacity) {
     mCapacity = capacity;
+
     mStart = 0;
     mSize = 0;
     mData = new sensors_event_t[mCapacity];
-    pthread_cond_init(&mDataAvailableCondition, NULL);
     pthread_cond_init(&mSpaceAvailableCondition, NULL);
-    pthread_mutex_init(&mMutex, NULL);
 }
 
 SensorEventQueue::~SensorEventQueue() {
     delete[] mData;
     mData = NULL;
-    pthread_cond_destroy(&mDataAvailableCondition);
     pthread_cond_destroy(&mSpaceAvailableCondition);
-    pthread_mutex_destroy(&mMutex);
-}
-
-void SensorEventQueue::lock() {
-    pthread_mutex_lock(&mMutex);
-}
-
-void SensorEventQueue::unlock() {
-    pthread_mutex_unlock(&mMutex);
-}
-
-void SensorEventQueue::waitForSpaceAndLock() {
-    lock();
-    while (mSize >= mCapacity) {
-        pthread_cond_wait(&mSpaceAvailableCondition, &mMutex);
-    }
-}
-
-void SensorEventQueue::waitForDataAndLock() {
-    lock();
-    while (mSize <= 0) {
-        pthread_cond_wait(&mDataAvailableCondition, &mMutex);
-    }
 }
 
 int SensorEventQueue::getWritableRegion(int requestedLength, sensors_event_t** out) {
-    if (mSize >= mCapacity || requestedLength <= 0) {
+    if (mSize == mCapacity || requestedLength <= 0) {
         *out = NULL;
         return 0;
     }
@@ -88,9 +61,6 @@
 
 void SensorEventQueue::markAsWritten(int count) {
     mSize += count;
-    if (mSize) {
-        pthread_cond_broadcast(&mDataAvailableCondition);
-    }
 }
 
 int SensorEventQueue::getSize() {
@@ -98,13 +68,21 @@
 }
 
 sensors_event_t* SensorEventQueue::peek() {
-    if (mSize <= 0) return NULL;
+    if (mSize == 0) return NULL;
     return &mData[mStart];
 }
 
 void SensorEventQueue::dequeue() {
-    if (mSize <= 0) return;
+    if (mSize == 0) return;
+    if (mSize == mCapacity) {
+        pthread_cond_broadcast(&mSpaceAvailableCondition);
+    }
     mSize--;
     mStart = (mStart + 1) % mCapacity;
-    pthread_cond_broadcast(&mSpaceAvailableCondition);
+}
+
+void SensorEventQueue::waitForSpace(pthread_mutex_t* mutex) {
+    while (mSize == mCapacity) {
+        pthread_cond_wait(&mSpaceAvailableCondition, mutex);
+    }
 }