From f04fbfd4bbb19c846b06ee6859eddca4212e861c Mon Sep 17 00:00:00 2001 From: Zach Johnson Date: Sat, 12 Dec 2020 23:03:50 -0800 Subject: [PATCH] rusty-gd: only allow one registration for an event, allow unregistering Bug: 171749953 Tag: #gd-refactor Test: gd/cert/run --rhost SimpleHalTest Change-Id: I6a0f12b696a22f0653037e3530ccfb4e2f38d001 --- gd/rust/hci/src/lib.rs | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/gd/rust/hci/src/lib.rs b/gd/rust/hci/src/lib.rs index 14629881f..c3b93b2b5 100644 --- a/gd/rust/hci/src/lib.rs +++ b/gd/rust/hci/src/lib.rs @@ -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, - ) { - self.evt_handlers.lock().await.insert(evt_code, sender); + pub async fn register_event_handler(&mut self, code: EventCode, sender: Sender) { + 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, ) { - 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); } } -- 2.11.0