adb: fdevent fixes

* fdevent_{set,add,del}()

  * CHECK() that the fdevent is FDE_ACTIVE, otherwise the caller would
    be waiting for events that will never arrive.

  * Remove ~ from "fde->events &= ~events" to keep desired bits instead
    of turning off desired bits.

* fdevent_call_fdfunc()

  * CHECK(FDE_PENDING) since it should always be true if the fdevent was
    on the pending list, or if fdevent_subproc_event_func() is faking
    things. The goal is to try to avoid losing events.

Change-Id: I979c2fffa0b3d6b635488cde11dc544691193018
Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
diff --git a/adb/fdevent.cpp b/adb/fdevent.cpp
index 2ffd908..1ccee9b 100644
--- a/adb/fdevent.cpp
+++ b/adb/fdevent.cpp
@@ -174,17 +174,16 @@
     if ((fde->state & FDE_EVENTMASK) == events) {
         return;
     }
-    if (fde->state & FDE_ACTIVE) {
-        fdevent_update(fde, events);
-        D("fdevent_set: %s, events = %u", dump_fde(fde).c_str(), events);
+    CHECK(fde->state & FDE_ACTIVE);
+    fdevent_update(fde, events);
+    D("fdevent_set: %s, events = %u", dump_fde(fde).c_str(), events);
 
-        if (fde->state & FDE_PENDING) {
-            // If we are pending, make sure we don't signal an event that is no longer wanted.
-            fde->events &= ~events;
-            if (fde->events == 0) {
-                g_pending_list.remove(fde);
-                fde->state &= ~FDE_PENDING;
-            }
+    if (fde->state & FDE_PENDING) {
+        // If we are pending, make sure we don't signal an event that is no longer wanted.
+        fde->events &= events;
+        if (fde->events == 0) {
+            g_pending_list.remove(fde);
+            fde->state &= ~FDE_PENDING;
         }
     }
 }
@@ -262,7 +261,7 @@
 {
     unsigned events = fde->events;
     fde->events = 0;
-    if(!(fde->state & FDE_PENDING)) return;
+    CHECK(fde->state & FDE_PENDING);
     fde->state &= (~FDE_PENDING);
     D("fdevent_call_fdfunc %s", dump_fde(fde).c_str());
     fde->func(fde->fd, events, fde->arg);