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

Commit 9013843f authored by Aritra Sen's avatar Aritra Sen Committed by Automerger Merge Worker
Browse files

Fix dangling pointer issues post Bluetooth shutdown cleanup for delayed task...

Fix dangling pointer issues post Bluetooth shutdown cleanup for delayed task in main thread. am: 3f99c21d

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/21107237



Change-Id: Ic45ff7200a27c4d508c8022bc261ae0f2a7d4be5
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents cda7e2f0 3f99c21d
Loading
Loading
Loading
Loading
+36 −8
Original line number Diff line number Diff line
@@ -321,13 +321,13 @@ class HearingAidImpl : public HearingAid {
    return connection_interval;
  }

  void Connect(const RawAddress& address) override {
  void Connect(const RawAddress& address) {
    LOG_DEBUG("%s", address.ToStringForLogging().c_str());
    hearingDevices.Add(HearingDevice(address, true));
    BTA_GATTC_Open(gatt_if, address, BTM_BLE_DIRECT_CONNECTION, false);
  }

  void AddToAcceptlist(const RawAddress& address) override {
  void AddToAcceptlist(const RawAddress& address) {
    LOG_DEBUG("%s", address.ToStringForLogging().c_str());
    hearingDevices.Add(HearingDevice(address, true));
    BTA_GATTC_Open(gatt_if, address, BTM_BLE_BKG_CONNECT_ALLOW_LIST, false);
@@ -1591,7 +1591,7 @@ class HearingAidImpl : public HearingAid {
    dprintf(fd, "%s", stream.str().c_str());
  }

  void Disconnect(const RawAddress& address) override {
  void Disconnect(const RawAddress& address) {
    HearingDevice* hearingDevice = hearingDevices.FindByAddress(address);
    if (!hearingDevice) {
      LOG_INFO("Device not connected to profile %s",
@@ -1714,7 +1714,7 @@ class HearingAidImpl : public HearingAid {
    current_volume = VOLUME_UNKNOWN;
  }

  void SetVolume(int8_t volume) override {
  void SetVolume(int8_t volume) {
    LOG_DEBUG("%d", volume);
    current_volume = volume;
    for (HearingDevice& device : hearingDevices.devices) {
@@ -1948,6 +1948,7 @@ void HearingAid::Initialize(
    bluetooth::hearing_aid::HearingAidCallbacks* callbacks, Closure initCb) {
  if (instance) {
    LOG_ERROR("Already initialized!");
    return;
  }

  audioReceiver = &audioReceiverImpl;
@@ -1957,10 +1958,37 @@ void HearingAid::Initialize(

bool HearingAid::IsHearingAidRunning() { return instance; }

HearingAid* HearingAid::Get() {
  CHECK(instance);
  return instance;
};
void HearingAid::Connect(const RawAddress& address) {
  if (!instance) {
    LOG_ERROR("Hearing Aid instance is not available");
    return;
  }
  instance->Connect(address);
}

void HearingAid::Disconnect(const RawAddress& address) {
  if (!instance) {
    LOG_ERROR("Hearing Aid instance is not available");
    return;
  }
  instance->Disconnect(address);
}

void HearingAid::AddToAcceptlist(const RawAddress& address) {
  if (!instance) {
    LOG_ERROR("Hearing Aid instance is not available");
    return;
  }
  instance->AddToAcceptlist(address);
}

void HearingAid::SetVolume(int8_t volume) {
  if (!instance) {
    LOG_ERROR("Hearing Aid instance is not available");
    return;
  }
  instance->SetVolume(volume);
}

void HearingAid::AddFromStorage(const HearingDevice& dev_info,
                                uint16_t is_acceptlisted) {
+4 −5
Original line number Diff line number Diff line
@@ -228,7 +228,6 @@ class HearingAid {
                         base::Closure initCb);
  static void CleanUp();
  static bool IsHearingAidRunning();
  static HearingAid* Get();
  static void DebugDump(int fd);

  static void AddFromStorage(const HearingDevice& dev_info,
@@ -236,10 +235,10 @@ class HearingAid {

  static int GetDeviceCount();

  virtual void Connect(const RawAddress& address) = 0;
  virtual void Disconnect(const RawAddress& address) = 0;
  virtual void AddToAcceptlist(const RawAddress& address) = 0;
  virtual void SetVolume(int8_t volume) = 0;
  static void Connect(const RawAddress& address);
  static void Disconnect(const RawAddress& address);
  static void AddToAcceptlist(const RawAddress& address);
  static void SetVolume(int8_t volume);
};

/* Represents configuration of audio codec, as exchanged between hearing aid and
+5 −11
Original line number Diff line number Diff line
@@ -85,30 +85,26 @@ class HearingAidInterfaceImpl

  void Connect(const RawAddress& address) override {
    DVLOG(2) << __func__ << " address: " << address;
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::Connect,
                                      Unretained(HearingAid::Get()), address));
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::Connect, address));
  }

  void Disconnect(const RawAddress& address) override {
    DVLOG(2) << __func__ << " address: " << address;
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::Disconnect,
                                      Unretained(HearingAid::Get()), address));
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::Disconnect, address));
    do_in_jni_thread(FROM_HERE, Bind(&btif_storage_set_hearing_aid_acceptlist,
                                     address, false));
  }

  void AddToAcceptlist(const RawAddress& address) override {
    VLOG(2) << __func__ << " address: " << address;
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::AddToAcceptlist,
                                      Unretained(HearingAid::Get()), address));
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::AddToAcceptlist, address));
    do_in_jni_thread(FROM_HERE, Bind(&btif_storage_set_hearing_aid_acceptlist,
                                     address, true));
  }

  void SetVolume(int8_t volume) override {
    DVLOG(2) << __func__ << " volume: " << +volume;
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::SetVolume,
                                      Unretained(HearingAid::Get()), volume));
    do_in_main_thread(FROM_HERE, Bind(&HearingAid::SetVolume, volume));
  }

  void RemoveDevice(const RawAddress& address) override {
@@ -116,9 +112,7 @@ class HearingAidInterfaceImpl

    // RemoveDevice can be called on devices that don't have HA enabled
    if (HearingAid::IsHearingAidRunning()) {
      do_in_main_thread(FROM_HERE,
                        Bind(&HearingAid::Disconnect,
                             Unretained(HearingAid::Get()), address));
      do_in_main_thread(FROM_HERE, Bind(&HearingAid::Disconnect, address));
    }

    do_in_jni_thread(FROM_HERE,
+21 −4
Original line number Diff line number Diff line
@@ -52,22 +52,39 @@ int HearingAid::GetDeviceCount() {
  mock_function_count_map[__func__]++;
  return 0;
}

void HearingAid::AddFromStorage(const HearingDevice& dev_info,
                                uint16_t is_acceptlisted) {
  mock_function_count_map[__func__]++;
}

void HearingAid::DebugDump(int fd) { mock_function_count_map[__func__]++; }
HearingAid* HearingAid::Get() {
  mock_function_count_map[__func__]++;
  return nullptr;
}

bool HearingAid::IsHearingAidRunning() {
  mock_function_count_map[__func__]++;
  return false;
}

void HearingAid::CleanUp() { mock_function_count_map[__func__]++; }

void HearingAid::Initialize(
    bluetooth::hearing_aid::HearingAidCallbacks* callbacks,
    base::Closure initCb) {
  mock_function_count_map[__func__]++;
}

void HearingAid::Connect(const RawAddress& address) {
  mock_function_count_map[__func__]++;
}

void HearingAid::Disconnect(const RawAddress& address) {
  mock_function_count_map[__func__]++;
}

void HearingAid::AddToAcceptlist(const RawAddress& address) {
  mock_function_count_map[__func__]++;
}

void HearingAid::SetVolume(int8_t volume) {
  mock_function_count_map[__func__]++;
}