diff --git a/lib/rb-inotify/notifier.rb b/lib/rb-inotify/notifier.rb
index <HASH>..<HASH> 100644
--- a/lib/rb-inotify/notifier.rb
+++ b/lib/rb-inotify/notifier.rb
@@ -242,6 +242,7 @@ module INotify
     #
     # @raise [SystemCallError] if closing the underlying file descriptor fails.
     def close
+      stop
       if Native.close(@fd) == 0
         @watchers.clear
         return
@@ -292,7 +293,11 @@ module INotify
     # Same as IO#readpartial, or as close as we need.
     def readpartial(size)
       # Use Ruby's readpartial if possible, to avoid blocking other threads.
-      return to_io.readpartial(size) if self.class.supports_ruby_io?
+      begin
+        return to_io.readpartial(size) if self.class.supports_ruby_io?
+      rescue Errno::EBADF
+        return []
+      end
 
       tries = 0
       begin
Avoid exception in case of closing a file watched by notifier, like trapping SIGINT to close the file without exception.