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

Commit d298cfa2 authored by Hemant Gupta's avatar Hemant Gupta Committed by Jakub Pawlowski
Browse files

Cancel LE Advertising related timers during shutdown

Failure to cancel advertising timers might lead to them being executed
after AdvertisingManager is destroyed.

Test: ran all advertising tests, no regression
Fixes: 71051865
Change-Id: I4431f5e0fe82501dbdbb9ca816eb092dde7c9436
parent bb353da6
Loading
Loading
Loading
Loading
+19 −1
Original line number Original line Diff line number Diff line
@@ -103,7 +103,11 @@ struct AdvertisingInstance {


  ~AdvertisingInstance() {
  ~AdvertisingInstance() {
    alarm_free(adv_raddr_timer);
    alarm_free(adv_raddr_timer);
    if (timeout_timer) alarm_free(timeout_timer);
    adv_raddr_timer = nullptr;
    if (timeout_timer) {
      alarm_free(timeout_timer);
      timeout_timer = nullptr;
    }
  }
  }
};
};


@@ -1008,6 +1012,18 @@ class BleAdvertisingManagerImpl
    return weak_factory_.GetWeakPtr();
    return weak_factory_.GetWeakPtr();
  }
  }


  void CancelAdvAlarms() {
    AdvertisingInstance* p_inst = &adv_inst[0];
    for (uint8_t i = 0; i < inst_count; i++, p_inst++) {
      if (p_inst->timeout_timer) {
        alarm_cancel(p_inst->timeout_timer);
      }
      if (p_inst->adv_raddr_timer) {
        alarm_cancel(p_inst->adv_raddr_timer);
      }
    }
  }

 private:
 private:
  BleAdvertiserHciInterface* GetHciInterface() { return hci_interface; }
  BleAdvertiserHciInterface* GetHciInterface() { return hci_interface; }


@@ -1040,6 +1056,8 @@ base::WeakPtr<BleAdvertisingManager> BleAdvertisingManager::Get() {
};
};


void BleAdvertisingManager::CleanUp() {
void BleAdvertisingManager::CleanUp() {
  if (instance_weakptr.get()) instance_weakptr.get()->CancelAdvAlarms();

  delete instance;
  delete instance;
  instance = nullptr;
  instance = nullptr;
};
};