From 7d0f9a7ce876322986523aafd46208a79669f42e Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jackpot51@gmail.com>
Date: Sun, 20 May 2018 13:18:51 -0600
Subject: [PATCH] Require correct event id return

---
 src/event.rs | 33 +++++++++++++++++++++++++++------
 1 file changed, 27 insertions(+), 6 deletions(-)

diff --git a/src/event.rs b/src/event.rs
index 0fcf7b96..88557bcb 100644
--- a/src/event.rs
+++ b/src/event.rs
@@ -137,7 +137,7 @@ pub fn register(reg_key: RegKey, queue_key: QueueKey, flags: usize) {
     }
 }
 
-pub fn send_flags(reg_key: RegKey) -> Result<usize> {
+pub fn send_flags(reg_key: RegKey) -> Result<()> {
     let mut flags = 0;
 
     {
@@ -150,14 +150,35 @@ pub fn send_flags(reg_key: RegKey) -> Result<usize> {
         }
     }
 
+    let event_id = {
+        let scheme = {
+            let schemes = scheme::schemes();
+            let scheme = schemes.get(reg_key.scheme).ok_or(Error::new(EBADF))?;
+            Arc::clone(&scheme)
+        };
 
-    let scheme = {
-        let schemes = scheme::schemes();
-        let scheme = schemes.get(reg_key.scheme).ok_or(Error::new(EBADF))?;
-        Arc::clone(&scheme)
+        scheme.fevent(reg_key.number, flags)?
     };
 
-    scheme.fevent(reg_key.number, flags)
+    if event_id != reg_key.number {
+        let scheme_ns = {
+            let contexts = context::contexts();
+            let context_lock = contexts.current().ok_or(Error::new(ESRCH))?;
+            let context = context_lock.read();
+            context.ens
+        };
+
+        let schemes = scheme::schemes();
+        for (name, &scheme_id) in schemes.iter_name(scheme_ns) {
+            if scheme_id == reg_key.scheme {
+                println!("  {}", unsafe { ::core::str::from_utf8_unchecked(name) });
+            }
+        }
+
+        panic!("schemes returned event id {} instead of {}", event_id, reg_key.number);
+    }
+
+    Ok(())
 }
 
 pub fn unregister_file(scheme: SchemeId, number: usize) {
-- 
GitLab