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

Commit 5e00bda4 authored by Chienyuan's avatar Chienyuan
Browse files

QueueTest: UnregisterDequeue before promise set value

For some tests, ~Queue will() be trigger right after we get promise
we should UnregisterDequeue before promise set value to prevent
race condition

Test: atest bluetooth_test_gd
Change-Id: I9409b6829cce61ef95c766a1d3b3679197b8f9f4
parent 5933b4ca
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -83,8 +83,8 @@ class TestBidiQueueEnd {
    std::promise<TB*>* promise = new std::promise<TB*>();
    handler_->Post([this, promise] {
      end_->RegisterDequeue(handler_, [this, promise] {
        promise->set_value(end_->TryDequeue().get());
        end_->UnregisterDequeue();
        promise->set_value(end_->TryDequeue().get());
      });
    });

+4 −4
Original line number Diff line number Diff line
@@ -159,16 +159,16 @@ class TestDequeueEnd {
    buffer_.push(std::move(data));
    LOG_INFO("push %s, size %d", copy.c_str(), (int)buffer_.size());  // Debug log, will be removed

    if (buffer_.size() == capacity_) {
      queue_->UnregisterDequeue();
    }

    auto pair = promise_map_->find(buffer_.size());
    if (pair != promise_map_->end()) {
      LOG_INFO("promises : %d", pair->first);  // Debug log, will be removed
      pair->second.set_value(pair->first);
      promise_map_->erase(pair->first);
    }

    if (buffer_.size() == capacity_) {
      queue_->UnregisterDequeue();
    }
  }

  void setDelay(int value) {