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

Commit 8724c3a6 authored by Chris Manton's avatar Chris Manton
Browse files

bluetooth_test_with_timerfd: Drop alarm reference within callback

Bug: 336781772
Test: atest bluetooth_test_with_timerfd
Flag: EXEMPT, Test Infrastructure

Change-Id: Ib3d8dc45345d7a3fb6e0062dc131191b052f2ae1
parent 19ffd231
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -95,12 +95,19 @@ TEST_F(AlarmOnTimerFdTest, cancel_alarm) {
}

TEST_F(AlarmOnTimerFdTest, cancel_alarm_from_callback) {
  auto promise = std::make_unique<std::promise<void>>();
  auto future = promise->get_future();
  alarm_->Schedule(BindOnce(&Alarm::Cancel, alarm_), kShortWait);
  // Could wait for kForever, but no need.  Just let others run twice for a short time.
  ASSERT_NE(std::future_status::ready, future.wait_for(kShortWait));
  ASSERT_NE(std::future_status::ready, future.wait_for(kShortWait));
  auto promise = std::promise<void>();
  auto future = promise.get_future();
  alarm_->Schedule(
      BindOnce(
          [](std::shared_ptr<Alarm> alarm, std::promise<void> promise) {
            alarm->Cancel();
            alarm.reset();  // Allow alarm to be freed by Teardown
            promise.set_value();
          },
          alarm_,
          std::move(promise)),
      kShortWait);
  ASSERT_EQ(std::future_status::ready, future.wait_for(kForever));
}

TEST_F(AlarmOnTimerFdTest, schedule_while_alarm_armed) {