adb: implement fdevent_reset by constructing a new context.

Test: adb_test
Change-Id: Ie67afafe2b73fb2a8fc08568560adac6f456eb9a
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.