Merge "BufferPool: Guarantee double-loadability" into rvc-dev

gugelfrei
TreeHugger Robot 4 years ago committed by Android (Google) Code Review
commit 241746e794

@ -135,7 +135,14 @@ bool contains(std::map<T, std::set<U>> *mapOfSet, T key, U value) {
return false; return false;
} }
uint32_t Accessor::Impl::sSeqId = time(nullptr); #ifdef __ANDROID_VNDK__
static constexpr uint32_t kSeqIdVndkBit = 1 << 31;
#else
static constexpr uint32_t kSeqIdVndkBit = 0;
#endif
static constexpr uint32_t kSeqIdMax = 0x7fffffff;
uint32_t Accessor::Impl::sSeqId = time(nullptr) & kSeqIdMax;
Accessor::Impl::Impl( Accessor::Impl::Impl(
const std::shared_ptr<BufferPoolAllocator> &allocator) const std::shared_ptr<BufferPoolAllocator> &allocator)
@ -157,7 +164,7 @@ ResultStatus Accessor::Impl::connect(
std::lock_guard<std::mutex> lock(mBufferPool.mMutex); std::lock_guard<std::mutex> lock(mBufferPool.mMutex);
if (newConnection) { if (newConnection) {
int32_t pid = getpid(); int32_t pid = getpid();
ConnectionId id = (int64_t)pid << 32 | sSeqId; ConnectionId id = (int64_t)pid << 32 | sSeqId | kSeqIdVndkBit;
status = mBufferPool.mObserver.open(id, statusDescPtr); status = mBufferPool.mObserver.open(id, statusDescPtr);
if (status == ResultStatus::OK) { if (status == ResultStatus::OK) {
newConnection->initialize(accessor, id); newConnection->initialize(accessor, id);
@ -167,7 +174,7 @@ ResultStatus Accessor::Impl::connect(
mBufferPool.mConnectionIds.insert(id); mBufferPool.mConnectionIds.insert(id);
mBufferPool.mInvalidationChannel.getDesc(invDescPtr); mBufferPool.mInvalidationChannel.getDesc(invDescPtr);
mBufferPool.mInvalidation.onConnect(id, observer); mBufferPool.mInvalidation.onConnect(id, observer);
if (sSeqId == UINT32_MAX) { if (sSeqId == kSeqIdMax) {
sSeqId = 0; sSeqId = 0;
} else { } else {
++sSeqId; ++sSeqId;

Loading…
Cancel
Save