adb: implement fdevent_reset by constructing a new context.
am: 7adca93fe9
Change-Id: Iefd84fb5453ed757feb3b8431c7b31f99e39541e
diff --git a/adb/fdevent/fdevent.cpp b/adb/fdevent/fdevent.cpp
index 82bb0a2..e80bb5a 100644
--- a/adb/fdevent/fdevent.cpp
+++ b/adb/fdevent/fdevent.cpp
@@ -49,10 +49,11 @@
state.c_str());
}
-static fdevent_context* g_ambient_fdevent_context = new fdevent_context_poll();
+static auto& g_ambient_fdevent_context =
+ *new std::unique_ptr<fdevent_context>(new fdevent_context_poll());
static fdevent_context* fdevent_get_ambient() {
- return g_ambient_fdevent_context;
+ return g_ambient_fdevent_context.get();
}
fdevent* fdevent_create(int fd, fd_func func, void* arg) {
@@ -110,5 +111,5 @@
}
void fdevent_reset() {
- return fdevent_get_ambient()->Reset();
+ g_ambient_fdevent_context.reset(new fdevent_context_poll());
}
diff --git a/adb/fdevent/fdevent.h b/adb/fdevent/fdevent.h
index 7bc50f4..b46219c 100644
--- a/adb/fdevent/fdevent.h
+++ b/adb/fdevent/fdevent.h
@@ -79,7 +79,6 @@
// Test-only functionality:
virtual void TerminateLoop() = 0;
virtual size_t InstalledCount() = 0;
- virtual void Reset() = 0;
};
struct fdevent {
diff --git a/adb/fdevent/fdevent_poll.cpp b/adb/fdevent/fdevent_poll.cpp
index 63ef3f1..6e016f6 100644
--- a/adb/fdevent/fdevent_poll.cpp
+++ b/adb/fdevent/fdevent_poll.cpp
@@ -458,15 +458,3 @@
size_t fdevent_context_poll::InstalledCount() {
return poll_node_map_.size();
}
-
-void fdevent_context_poll::Reset() {
- poll_node_map_.clear();
- pending_list_.clear();
-
- std::lock_guard<std::mutex> lock(run_queue_mutex_);
- run_queue_notify_fd_.reset();
- run_queue_.clear();
-
- main_thread_valid_ = false;
- terminate_loop_ = false;
-}
diff --git a/adb/fdevent/fdevent_poll.h b/adb/fdevent/fdevent_poll.h
index aa82ee5..f5720ca 100644
--- a/adb/fdevent/fdevent_poll.h
+++ b/adb/fdevent/fdevent_poll.h
@@ -62,7 +62,6 @@
virtual void TerminateLoop() final;
virtual size_t InstalledCount() final;
- virtual void Reset() final;
// All operations to fdevent should happen only in the main thread.
// That's why we don't need a lock for fdevent.