diff options
author | Peng Xu <pengxu@google.com> | 2016-09-10 03:00:01 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-09-10 03:00:01 +0000 |
commit | 93ec87d2da0d2c42734492f689cef0bf64e5b66b (patch) | |
tree | 08864a8eb802ca8cb393552cb814186a68960ece | |
parent | a029c0726d082d117f85cc7bc2faef1f1af6d51d (diff) | |
parent | eb05947ae2c4ac3a80712fed9382d82cb9aedad5 (diff) | |
download | native-93ec87d2da0d2c42734492f689cef0bf64e5b66b.tar.gz |
Merge "Fix dangerous unsafe_get() in SensorRecord" into nyc-mr1-dev
-rw-r--r-- | services/sensorservice/SensorEventConnection.cpp | 6 | ||||
-rw-r--r-- | services/sensorservice/SensorEventConnection.h | 2 | ||||
-rw-r--r-- | services/sensorservice/SensorRecord.cpp | 16 | ||||
-rw-r--r-- | services/sensorservice/SensorRecord.h | 14 | ||||
-rw-r--r-- | services/sensorservice/SensorService.cpp | 2 | ||||
-rw-r--r-- | services/sensorservice/SensorService.h | 2 |
6 files changed, 21 insertions, 21 deletions
diff --git a/services/sensorservice/SensorEventConnection.cpp b/services/sensorservice/SensorEventConnection.cpp index c1e1badf32..f2f1444125 100644 --- a/services/sensorservice/SensorEventConnection.cpp +++ b/services/sensorservice/SensorEventConnection.cpp @@ -206,7 +206,7 @@ void SensorService::SensorEventConnection::incrementPendingFlushCount(int32_t ha status_t SensorService::SensorEventConnection::sendEvents( sensors_event_t const* buffer, size_t numEvents, sensors_event_t* scratch, - SensorEventConnection const * const * mapFlushEventsToConnections) { + wp<const SensorEventConnection> const * mapFlushEventsToConnections) { // filter out events not for this connection int count = 0; Mutex::Autolock _l(mConnectionLock); @@ -234,7 +234,7 @@ status_t SensorService::SensorEventConnection::sendEvents( FlushInfo& flushInfo = mSensorInfo.editValueAt(index); // Check if there is a pending flush_complete event for this sensor on this connection. if (buffer[i].type == SENSOR_TYPE_META_DATA && flushInfo.mFirstFlushPending == true && - this == mapFlushEventsToConnections[i]) { + mapFlushEventsToConnections[i] == this) { flushInfo.mFirstFlushPending = false; ALOGD_IF(DEBUG_CONNECTIONS, "First flush event for sensor==%d ", buffer[i].meta_data.sensor); @@ -255,7 +255,7 @@ status_t SensorService::SensorEventConnection::sendEvents( // from the same sensor_handle AND the current connection is mapped to the // corresponding flush_complete_event. if (buffer[i].type == SENSOR_TYPE_META_DATA) { - if (this == mapFlushEventsToConnections[i]) { + if (mapFlushEventsToConnections[i] == this) { scratch[count++] = buffer[i]; } ++i; diff --git a/services/sensorservice/SensorEventConnection.h b/services/sensorservice/SensorEventConnection.h index b796cc05a1..883c16e23b 100644 --- a/services/sensorservice/SensorEventConnection.h +++ b/services/sensorservice/SensorEventConnection.h @@ -52,7 +52,7 @@ public: bool isDataInjectionMode, const String16& opPackageName); status_t sendEvents(sensors_event_t const* buffer, size_t count, sensors_event_t* scratch, - SensorEventConnection const * const * mapFlushEventsToConnections = NULL); + wp<const SensorEventConnection> const * mapFlushEventsToConnections = NULL); bool hasSensor(int32_t handle) const; bool hasAnySensor() const; bool hasOneShotSensors() const; diff --git a/services/sensorservice/SensorRecord.cpp b/services/sensorservice/SensorRecord.cpp index 644cfb0de3..53fb9de230 100644 --- a/services/sensorservice/SensorRecord.cpp +++ b/services/sensorservice/SensorRecord.cpp @@ -21,13 +21,13 @@ namespace android { SensorService::SensorRecord::SensorRecord( - const sp<SensorEventConnection>& connection) + const sp<const SensorEventConnection>& connection) { mConnections.add(connection); } bool SensorService::SensorRecord::addConnection( - const sp<SensorEventConnection>& connection) + const sp<const SensorEventConnection>& connection) { if (mConnections.indexOf(connection) < 0) { mConnections.add(connection); @@ -37,16 +37,16 @@ bool SensorService::SensorRecord::addConnection( } bool SensorService::SensorRecord::removeConnection( - const wp<SensorEventConnection>& connection) + const wp<const SensorEventConnection>& connection) { ssize_t index = mConnections.indexOf(connection); if (index >= 0) { mConnections.removeItemsAt(index, 1); } // Remove this connections from the queue of flush() calls made on this sensor. - for (Vector< wp<SensorEventConnection> >::iterator it = mPendingFlushConnections.begin(); + for (Vector< wp<const SensorEventConnection> >::iterator it = mPendingFlushConnections.begin(); it != mPendingFlushConnections.end(); ) { - if (it->unsafe_get() == connection.unsafe_get()) { + if (*it == connection) { it = mPendingFlushConnections.erase(it); } else { ++it; @@ -56,7 +56,7 @@ bool SensorService::SensorRecord::removeConnection( } void SensorService::SensorRecord::addPendingFlushConnection( - const sp<SensorEventConnection>& connection) { + const sp<const SensorEventConnection>& connection) { mPendingFlushConnections.add(connection); } @@ -66,10 +66,10 @@ void SensorService::SensorRecord::removeFirstPendingFlushConnection() { } } -SensorService::SensorEventConnection * +wp<const SensorService::SensorEventConnection> SensorService::SensorRecord::getFirstPendingFlushConnection() { if (mPendingFlushConnections.size() > 0) { - return mPendingFlushConnections[0].unsafe_get(); + return mPendingFlushConnections[0]; } return NULL; } diff --git a/services/sensorservice/SensorRecord.h b/services/sensorservice/SensorRecord.h index 29b970dc1f..5a35410572 100644 --- a/services/sensorservice/SensorRecord.h +++ b/services/sensorservice/SensorRecord.h @@ -25,20 +25,20 @@ class SensorService; class SensorService::SensorRecord { public: - SensorRecord(const sp<SensorEventConnection>& connection); - bool addConnection(const sp<SensorEventConnection>& connection); - bool removeConnection(const wp<SensorEventConnection>& connection); + SensorRecord(const sp<const SensorEventConnection>& connection); + bool addConnection(const sp<const SensorEventConnection>& connection); + bool removeConnection(const wp<const SensorEventConnection>& connection); size_t getNumConnections() const { return mConnections.size(); } - void addPendingFlushConnection(const sp<SensorEventConnection>& connection); + void addPendingFlushConnection(const sp<const SensorEventConnection>& connection); void removeFirstPendingFlushConnection(); - SensorEventConnection * getFirstPendingFlushConnection(); + wp<const SensorEventConnection> getFirstPendingFlushConnection(); void clearAllPendingFlushConnections(); private: - SortedVector< wp<SensorEventConnection> > mConnections; + SortedVector< wp<const SensorEventConnection> > mConnections; // A queue of all flush() calls made on this sensor. Flush complete events // will be sent in this order. - Vector< wp<SensorEventConnection> > mPendingFlushConnections; + Vector< wp<const SensorEventConnection> > mPendingFlushConnections; }; } diff --git a/services/sensorservice/SensorService.cpp b/services/sensorservice/SensorService.cpp index a24740be74..dbd06244cb 100644 --- a/services/sensorservice/SensorService.cpp +++ b/services/sensorservice/SensorService.cpp @@ -260,7 +260,7 @@ void SensorService::onFirstRef() { const size_t minBufferSize = SensorEventQueue::MAX_RECEIVE_BUFFER_EVENT_COUNT; mSensorEventBuffer = new sensors_event_t[minBufferSize]; mSensorEventScratch = new sensors_event_t[minBufferSize]; - mMapFlushEventsToConnections = new SensorEventConnection const * [minBufferSize]; + mMapFlushEventsToConnections = new wp<const SensorEventConnection> [minBufferSize]; mCurrentOperatingMode = NORMAL; mNextSensorRegIndex = 0; diff --git a/services/sensorservice/SensorService.h b/services/sensorservice/SensorService.h index 1e1ea5ab4a..4a63ef0afc 100644 --- a/services/sensorservice/SensorService.h +++ b/services/sensorservice/SensorService.h @@ -237,7 +237,7 @@ private: SortedVector< wp<SensorEventConnection> > mActiveConnections; bool mWakeLockAcquired; sensors_event_t *mSensorEventBuffer, *mSensorEventScratch; - SensorEventConnection const **mMapFlushEventsToConnections; + wp<const SensorEventConnection> * mMapFlushEventsToConnections; std::unordered_map<int, RecentEventLogger*> mRecentEvent; Mode mCurrentOperatingMode; |