Loading services/core/java/com/android/server/location/contexthub/ContextHubService.java +61 −39 Original line number Diff line number Diff line Loading @@ -317,9 +317,6 @@ public class ContextHubService extends IContextHubService.Stub { */ private static final int MAX_PROBABILITY_PERCENT = 100; /** * Random number generator. */ private Random mRandom = new Random(); /** Loading Loading @@ -998,17 +995,19 @@ public class ContextHubService extends IContextHubService.Stub { return; } if (message.isReliable()) { if (!message.isReliable()) { mClientManager.onMessageFromNanoApp( contextHubId, hostEndpointId, message, nanoappPermissions, messagePermissions); cleanupReliableMessageRecordQueue(); return; } byte errorCode = ErrorCode.OK; synchronized (mReliableMessageRecordQueue) { Optional<ReliableMessageRecord> record = Optional.empty(); for (ReliableMessageRecord r: mReliableMessageRecordQueue) { if (r.getContextHubId() == contextHubId && r.getMessageSequenceNumber() == message.getMessageSequenceNumber()) { record = Optional.of(r); break; } } Optional<ReliableMessageRecord> record = findReliableMessageRecord(contextHubId, message.getMessageSequenceNumber()); if (record.isPresent()) { errorCode = record.get().getErrorCode(); Loading @@ -1034,14 +1033,37 @@ public class ContextHubService extends IContextHubService.Stub { errorCode)); } } sendMessageDeliveryStatusToContextHub(contextHubId, message.getMessageSequenceNumber(), errorCode); } else { mClientManager.onMessageFromNanoApp( contextHubId, hostEndpointId, message, nanoappPermissions, messagePermissions); cleanupReliableMessageRecordQueue(); } /** * Finds a reliable message record in the queue that matches the given * context hub ID and message sequence number. This function assumes * the caller is synchronized on mReliableMessageRecordQueue. * * @param contextHubId the ID of the hub * @param messageSequenceNumber the message sequence number * * @return the record if found, or empty if not found */ private Optional<ReliableMessageRecord> findReliableMessageRecord( int contextHubId, int messageSequenceNumber) { for (ReliableMessageRecord record: mReliableMessageRecordQueue) { if (record.getContextHubId() == contextHubId && record.getMessageSequenceNumber() == messageSequenceNumber) { return Optional.of(record); } } return Optional.empty(); } /** * Removes old entries from the reliable message record queue. */ private void cleanupReliableMessageRecordQueue() { synchronized (mReliableMessageRecordQueue) { while (mReliableMessageRecordQueue.peek() != null && mReliableMessageRecordQueue.peek().isExpired()) { Loading Loading
services/core/java/com/android/server/location/contexthub/ContextHubService.java +61 −39 Original line number Diff line number Diff line Loading @@ -317,9 +317,6 @@ public class ContextHubService extends IContextHubService.Stub { */ private static final int MAX_PROBABILITY_PERCENT = 100; /** * Random number generator. */ private Random mRandom = new Random(); /** Loading Loading @@ -998,17 +995,19 @@ public class ContextHubService extends IContextHubService.Stub { return; } if (message.isReliable()) { if (!message.isReliable()) { mClientManager.onMessageFromNanoApp( contextHubId, hostEndpointId, message, nanoappPermissions, messagePermissions); cleanupReliableMessageRecordQueue(); return; } byte errorCode = ErrorCode.OK; synchronized (mReliableMessageRecordQueue) { Optional<ReliableMessageRecord> record = Optional.empty(); for (ReliableMessageRecord r: mReliableMessageRecordQueue) { if (r.getContextHubId() == contextHubId && r.getMessageSequenceNumber() == message.getMessageSequenceNumber()) { record = Optional.of(r); break; } } Optional<ReliableMessageRecord> record = findReliableMessageRecord(contextHubId, message.getMessageSequenceNumber()); if (record.isPresent()) { errorCode = record.get().getErrorCode(); Loading @@ -1034,14 +1033,37 @@ public class ContextHubService extends IContextHubService.Stub { errorCode)); } } sendMessageDeliveryStatusToContextHub(contextHubId, message.getMessageSequenceNumber(), errorCode); } else { mClientManager.onMessageFromNanoApp( contextHubId, hostEndpointId, message, nanoappPermissions, messagePermissions); cleanupReliableMessageRecordQueue(); } /** * Finds a reliable message record in the queue that matches the given * context hub ID and message sequence number. This function assumes * the caller is synchronized on mReliableMessageRecordQueue. * * @param contextHubId the ID of the hub * @param messageSequenceNumber the message sequence number * * @return the record if found, or empty if not found */ private Optional<ReliableMessageRecord> findReliableMessageRecord( int contextHubId, int messageSequenceNumber) { for (ReliableMessageRecord record: mReliableMessageRecordQueue) { if (record.getContextHubId() == contextHubId && record.getMessageSequenceNumber() == messageSequenceNumber) { return Optional.of(record); } } return Optional.empty(); } /** * Removes old entries from the reliable message record queue. */ private void cleanupReliableMessageRecordQueue() { synchronized (mReliableMessageRecordQueue) { while (mReliableMessageRecordQueue.peek() != null && mReliableMessageRecordQueue.peek().isExpired()) { Loading