OSDN Git Service

rusty-gd: only allow one registration for an event, allow unregistering
authorZach Johnson <zachoverflow@google.com>
Sun, 13 Dec 2020 07:03:50 +0000 (23:03 -0800)
committerZach Johnson <zachoverflow@google.com>
Fri, 18 Dec 2020 19:33:56 +0000 (11:33 -0800)
Bug: 171749953
Tag: #gd-refactor
Test: gd/cert/run --rhost SimpleHalTest
Change-Id: I6a0f12b696a22f0653037e3530ccfb4e2f38d001

gd/rust/hci/src/lib.rs

index 1462988..c3b93b2 100644 (file)
@@ -104,21 +104,43 @@ impl HciExports {
     }
 
     /// Indicate interest in specific HCI events
-    pub async fn register_event_handler(
-        &mut self,
-        evt_code: EventCode,
-        sender: Sender<EventPacket>,
-    ) {
-        self.evt_handlers.lock().await.insert(evt_code, sender);
+    pub async fn register_event_handler(&mut self, code: EventCode, sender: Sender<EventPacket>) {
+        assert!(
+            self.evt_handlers
+                .lock()
+                .await
+                .insert(code, sender)
+                .is_none(),
+            "A handler for {:?} is already registered",
+            code
+        );
+    }
+
+    /// Remove interest in specific HCI events
+    pub async fn unregister_event_handler(&mut self, code: EventCode) {
+        self.evt_handlers.lock().await.remove(&code);
     }
 
     /// Indicate interest in specific LE events
     pub async fn register_le_event_handler(
         &mut self,
-        evt_code: SubeventCode,
+        code: SubeventCode,
         sender: Sender<LeMetaEventPacket>,
     ) {
-        self.le_evt_handlers.lock().await.insert(evt_code, sender);
+        assert!(
+            self.le_evt_handlers
+                .lock()
+                .await
+                .insert(code, sender)
+                .is_none(),
+            "A handler for {:?} is already registered",
+            code
+        );
+    }
+
+    /// Remove interest in specific LE events
+    pub async fn unregister_le_event_handler(&mut self, code: SubeventCode) {
+        self.le_evt_handlers.lock().await.remove(&code);
     }
 }