@@ -225,9 +225,10 @@ bool SensorService::threadLoop()
225225{
226226 ALOGD (" nuSensorService thread starting..." );
227227
228- const size_t numEventMax = 16 * (1 + mVirtualSensorList .size ());
229- sensors_event_t buffer[numEventMax];
230- sensors_event_t scratch[numEventMax];
228+ const size_t numEventMax = 16 ;
229+ const size_t minBufferSize = numEventMax * mVirtualSensorList .size ();
230+ sensors_event_t buffer[minBufferSize];
231+ sensors_event_t scratch[minBufferSize];
231232 SensorDevice& device (SensorDevice::getInstance ());
232233 const size_t vcount = mVirtualSensorList .size ();
233234
@@ -255,10 +256,17 @@ bool SensorService::threadLoop()
255256 fusion.process (event[i]);
256257 }
257258 }
258- for (size_t i=0 ; i<size_t (count) ; i++) {
259+ for (size_t i=0 ; i<size_t (count) && k<minBufferSize ; i++) {
259260 for (size_t j=0 ; j<activeVirtualSensorCount ; j++) {
261+ if (count + k >= minBufferSize) {
262+ ALOGE (" buffer too small to hold all events: "
263+ " count=%u, k=%u, size=%u" ,
264+ count, k, minBufferSize);
265+ break ;
266+ }
260267 sensors_event_t out;
261- if (virtualSensors.valueAt (j)->process (&out, event[i])) {
268+ SensorInterface* si = virtualSensors.valueAt (j);
269+ if (si->process (&out, event[i])) {
262270 buffer[count + k] = out;
263271 k++;
264272 }
0 commit comments