From 113af694342c50200cfe85d68e9afe6bf4209146 Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jeremy@system76.com>
Date: Thu, 18 Jul 2019 20:58:06 -0600
Subject: [PATCH] Remove scheme if closed

---
 src/scheme/root.rs | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/scheme/root.rs b/src/scheme/root.rs
index 7cb5d52c..27cbcecb 100644
--- a/src/scheme/root.rs
+++ b/src/scheme/root.rs
@@ -309,7 +309,15 @@ impl Scheme for RootScheme {
     }
 
     fn close(&self, file: usize) -> Result<usize> {
-        self.handles.write().remove(&file);
+        let handle = self.handles.write().remove(&file).ok_or(Error::new(EBADF))?;
+        match handle {
+            Handle::Scheme(inner) => {
+                let scheme_id = inner.scheme_id.load(Ordering::SeqCst);
+                let mut schemes = scheme::schemes_mut();
+                schemes.remove(scheme_id);
+            },
+            _ => ()
+        }
         Ok(0)
     }
 }
-- 
GitLab