Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28a0e9ec authored by Eric Laurent's avatar Eric Laurent
Browse files

Radio: get service by value.

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
parent 483c0d40
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ public:
private:
            Radio(radio_handle_t handle,
                            const sp<RadioCallback>&);
            static const sp<IRadioService>& getRadioService();
            static const sp<IRadioService> getRadioService();

            Mutex                   mLock;
            sp<IRadio>              mIRadio;
+3 −3
Original line number Diff line number Diff line
@@ -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) {
@@ -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;
    }
@@ -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;
    }