adb: fdevent: move TerminateLoop to fdevent_context.
Test: adb_test
Change-Id: Ib1f20aefdb36603e2ceac4197c02551f557056ee
diff --git a/adb/fdevent/fdevent.cpp b/adb/fdevent/fdevent.cpp
index 698b293..d2f81e0 100644
--- a/adb/fdevent/fdevent.cpp
+++ b/adb/fdevent/fdevent.cpp
@@ -63,6 +63,11 @@
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.
diff --git a/adb/fdevent/fdevent.h b/adb/fdevent/fdevent.h
index c007e51..e84cff7 100644
--- a/adb/fdevent/fdevent.h
+++ b/adb/fdevent/fdevent.h
@@ -71,8 +71,9 @@
// 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 @@
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 @@
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_;
diff --git a/adb/fdevent/fdevent_poll.cpp b/adb/fdevent/fdevent_poll.cpp
index 8a12162..43fd462 100644
--- a/adb/fdevent/fdevent_poll.cpp
+++ b/adb/fdevent/fdevent_poll.cpp
@@ -392,11 +392,6 @@
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;
diff --git a/adb/fdevent/fdevent_poll.h b/adb/fdevent/fdevent_poll.h
index b0465b9..9ae47ba 100644
--- a/adb/fdevent/fdevent_poll.h
+++ b/adb/fdevent/fdevent_poll.h
@@ -58,7 +58,6 @@
virtual void Loop() final;
- virtual void TerminateLoop() final;
virtual size_t InstalledCount() final;
protected:
@@ -73,5 +72,4 @@
unique_fd interrupt_fd_;
fdevent* interrupt_fde_ = nullptr;
- std::atomic<bool> terminate_loop_ = false;
};