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

Commit 5d9d263b authored by Josh Gao's avatar Josh Gao Committed by android-build-merger
Browse files

adb: fdevent: move TerminateLoop to fdevent_context. am: ebaa348d

am: 296977fe

Change-Id: I550fa1a594de19e81d0e1d96491b93d0a3e40979
parents cc15151d 296977fe
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -63,6 +63,11 @@ void fdevent_context::Run(std::function<void()> fn) {
    Interrupt();
}

void fdevent_context::TerminateLoop() {
    terminate_loop_ = true;
    Interrupt();
}

void fdevent_context::FlushRunQueue() {
    // We need to be careful around reentrancy here, since a function we call can queue up another
    // function.
+5 −3
Original line number Diff line number Diff line
@@ -71,8 +71,9 @@ struct fdevent_context {
    // trigger repeatedly every |timeout| ms.
    virtual void SetTimeout(fdevent* fde, std::optional<std::chrono::milliseconds> timeout) = 0;

    // Loop forever, handling events.
    // Implementations should call FlushRunQueue on every iteration.
    // Loop until TerminateLoop is called, handling events.
    // Implementations should call FlushRunQueue on every iteration, and check the value of
    // terminate_loop_ to determine whether to stop.
    virtual void Loop() = 0;

    // Assert that the caller is either running on the context's main thread, or that there is no
@@ -83,7 +84,7 @@ struct fdevent_context {
    void Run(std::function<void()> fn);

    // Test-only functionality:
    virtual void TerminateLoop() = 0;
    void TerminateLoop();
    virtual size_t InstalledCount() = 0;

  protected:
@@ -94,6 +95,7 @@ struct fdevent_context {
    void FlushRunQueue() EXCLUDES(run_queue_mutex_);

    std::optional<uint64_t> main_thread_id_ = std::nullopt;
    std::atomic<bool> terminate_loop_ = false;

  private:
    std::mutex run_queue_mutex_;
+0 −5
Original line number Diff line number Diff line
@@ -392,11 +392,6 @@ void fdevent_context_poll::Loop() {
    main_thread_id_.reset();
}

void fdevent_context_poll::TerminateLoop() {
    terminate_loop_ = true;
    Interrupt();
}

size_t fdevent_context_poll::InstalledCount() {
    // We always have an installed fde for interrupt.
    return poll_node_map_.size() - 1;
+0 −2
Original line number Diff line number Diff line
@@ -58,7 +58,6 @@ struct fdevent_context_poll : public fdevent_context {

    virtual void Loop() final;

    virtual void TerminateLoop() final;
    virtual size_t InstalledCount() final;

  protected:
@@ -73,5 +72,4 @@ struct fdevent_context_poll : public fdevent_context {

    unique_fd interrupt_fd_;
    fdevent* interrupt_fde_ = nullptr;
    std::atomic<bool> terminate_loop_ = false;
};