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

Commit 1ec6aae0 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix dangling pointer issues post Bluetooth shutdown cleanup for delayed...

Merge "Fix dangling pointer issues post Bluetooth shutdown cleanup for delayed task in main thread." am: 05480f1f

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



Change-Id: I343c8a882540e9f06da0829ab05515ea7df40bac
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents efeb7eac 05480f1f
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);
@@ -1593,7 +1593,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",
@@ -1716,7 +1716,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) {
@@ -1950,6 +1950,7 @@ void HearingAid::Initialize(
    bluetooth::hearing_aid::HearingAidCallbacks* callbacks, Closure initCb) {
  if (instance) {
    LOG_ERROR("Already initialized!");
    return;
  }

  audioReceiver = &audioReceiverImpl;
@@ -1959,10 +1960,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__]++;
}