Skip to content

Commit

Permalink
Radio: get service by value
Browse files Browse the repository at this point in the history
Get strong pointer to service interface by value and not reference to
prevent race conditions where the service pointer can be cleared
by another thread while in use.

Bug: 30907212
Change-Id: Iae838b3b672562c1d0cd63968399a6bfdda7f5ab
(cherry picked from commit 28a0e9e)
(cherry picked from commit bd04b47d38a89f1dada1c6da2ef4a3d235c166b8)
  • Loading branch information
Eric Laurent authored and Naveen Kumar committed Nov 17, 2016
1 parent f03d82f commit 5d2ad7c
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
2 changes: 1 addition & 1 deletion include/radio/Radio.h
Expand Up @@ -75,7 +75,7 @@ class Radio : public BnRadioClient,
private:
Radio(radio_handle_t handle,
const sp<RadioCallback>&);
static const sp<IRadioService>& getRadioService();
static const sp<IRadioService> getRadioService();

Mutex mLock;
sp<IRadio> mIRadio;
Expand Down
6 changes: 3 additions & 3 deletions radio/Radio.cpp
Expand Up @@ -55,7 +55,7 @@ namespace {
sp<DeathNotifier> gDeathNotifier;
}; // namespace anonymous

const sp<IRadioService>& Radio::getRadioService()
const sp<IRadioService> Radio::getRadioService()
{
Mutex::Autolock _l(gLock);
if (gRadioService.get() == 0) {
Expand Down Expand Up @@ -84,7 +84,7 @@ status_t Radio::listModules(struct radio_properties *properties,
uint32_t *numModules)
{
ALOGV("listModules()");
const sp<IRadioService>& service = getRadioService();
const sp<IRadioService> service = getRadioService();
if (service == 0) {
return NO_INIT;
}
Expand All @@ -98,7 +98,7 @@ sp<Radio> Radio::attach(radio_handle_t handle,
{
ALOGV("attach()");
sp<Radio> radio;
const sp<IRadioService>& service = getRadioService();
const sp<IRadioService> service = getRadioService();
if (service == 0) {
return radio;
}
Expand Down

0 comments on commit 5d2ad7c

Please sign in to comment.