diff options
author | Kevin Tang <zhikait@codeaurora.org> | 2019-08-15 15:43:03 -0700 |
---|---|---|
committer | Kevin Tang <zhikait@codeaurora.org> | 2019-08-16 11:20:03 -0700 |
commit | 32e36b84e103862364a8a037272156b2b3814b6f (patch) | |
tree | 3ad8bec2c0f1c1927162525a96d831151836571e /core/LocApiBase.cpp | |
parent | e549c9be3b4719dfa2aa5fbc64684c2b358e4213 (diff) | |
download | gps-32e36b84e103862364a8a037272156b2b3814b6f.tar.gz |
delete of shared LocApiBase::mMsgTask may cause issues
mMsgTask is static, its delete would impact other LocApi
objects which don't know it is deleted. Added refcount
to manage this shared obj.
Change-Id: Iea81039b9cd74081c5230d6bb18ea80c2ee05916
CRs-Fixed: 2505569
Diffstat (limited to 'core/LocApiBase.cpp')
-rw-r--r-- | core/LocApiBase.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/core/LocApiBase.cpp b/core/LocApiBase.cpp index ef204ec..14472fa 100644 --- a/core/LocApiBase.cpp +++ b/core/LocApiBase.cpp @@ -148,7 +148,8 @@ struct LocCloseMsg : public LocMsg { } }; -MsgTask* LocApiBase::mMsgTask; +MsgTask* LocApiBase::mMsgTask = nullptr; +volatile int32_t LocApiBase::mMsgTaskRefCount = 0; LocApiBase::LocApiBase(LOC_API_ADAPTER_EVENT_MASK_T excludedMask, ContextBase* context) : @@ -157,6 +158,7 @@ LocApiBase::LocApiBase(LOC_API_ADAPTER_EVENT_MASK_T excludedMask, { memset(mLocAdapters, 0, sizeof(mLocAdapters)); + android_atomic_inc(&mMsgTaskRefCount); if (nullptr == mMsgTask) { mMsgTask = new MsgTask("LocApiMsgTask", false); } @@ -230,7 +232,7 @@ void LocApiBase::addAdapter(LocAdapterBase* adapter) for (int i = 0; i < MAX_ADAPTERS && mLocAdapters[i] != adapter; i++) { if (mLocAdapters[i] == NULL) { mLocAdapters[i] = adapter; - mMsgTask->sendMsg(new LocOpenMsg(this, adapter)); + sendMsg(new LocOpenMsg(this, adapter)); break; } } @@ -263,10 +265,10 @@ void LocApiBase::removeAdapter(LocAdapterBase* adapter) // if we have an empty list of adapters if (0 == i) { - mMsgTask->sendMsg(new LocCloseMsg(this)); + sendMsg(new LocCloseMsg(this)); } else { // else we need to remove the bit - mMsgTask->sendMsg(new LocOpenMsg(this)); + sendMsg(new LocOpenMsg(this)); } } } @@ -274,7 +276,7 @@ void LocApiBase::removeAdapter(LocAdapterBase* adapter) void LocApiBase::updateEvtMask() { - mMsgTask->sendMsg(new LocOpenMsg(this)); + sendMsg(new LocOpenMsg(this)); } void LocApiBase::updateNmeaMask(uint32_t mask) @@ -298,7 +300,7 @@ void LocApiBase::updateNmeaMask(uint32_t mask) } }; - mMsgTask->sendMsg(new LocSetNmeaMsg(this, mask)); + sendMsg(new LocSetNmeaMsg(this, mask)); } void LocApiBase::handleEngineUpEvent() |