Browse Source

Hack around closedir crashing

Jeremy Soller 6 years ago
parent
commit
7049359c25
1 changed files with 12 additions and 4 deletions
  1. 12 4
      src/header/dirent/mod.rs

+ 12 - 4
src/header/dirent/mod.rs

@@ -57,12 +57,20 @@ pub unsafe extern "C" fn opendir(path: *const c_char) -> *mut DIR {
 
 #[no_mangle]
 pub unsafe extern "C" fn closedir(dir: *mut DIR) -> c_int {
-    let mut dir = Box::from_raw(dir);
 
-    let ret = Sys::close(*dir.file);
+    let ret = {
+        let mut dir = Box::from_raw(dir);
 
-    // Reference files aren't closed when dropped
-    dir.file.reference = true;
+        let ret = Sys::close(*dir.file);
+
+        // Reference files aren't closed when dropped
+        dir.file.reference = true;
+
+        //TODO: find out why dropping dir can crash
+        mem::forget(dir);
+
+        ret
+    };
 
     ret
 }