[Unison-hackers] [unison-svn] r517 - in trunk/src: . fsmonitor/linux fsmonitor/windows

vouillon at seas.upenn.edu vouillon at seas.upenn.edu
Tue Nov 20 06:01:22 EST 2012


Author: vouillon
Date: 2012-11-20 06:01:22 -0500 (Tue, 20 Nov 2012)
New Revision: 517

Modified:
   trunk/src/RECENTNEWS
   trunk/src/fsmonitor/linux/watcher.ml
   trunk/src/fsmonitor/windows/watcher.ml
   trunk/src/mkProjectInfo.ml
Log:
* File system monitoring: the file watcher now fails when unable to
  watch a directory, rather than silently ignoring the issue


Modified: trunk/src/RECENTNEWS
===================================================================
--- trunk/src/RECENTNEWS	2012-09-24 11:44:38 UTC (rev 516)
+++ trunk/src/RECENTNEWS	2012-11-20 11:01:22 UTC (rev 517)
@@ -1,3 +1,9 @@
+CHANGES FROM VERSION 2.46.12
+
+* File system monitoring: the file watcher now fails when unable to
+  watch a directory, rather than silently ignoring the issue
+
+-------------------------------
 CHANGES FROM VERSION 2.46.10
 
 * File system monitoring: more robust communication with the helper program

Modified: trunk/src/fsmonitor/linux/watcher.ml
===================================================================
--- trunk/src/fsmonitor/linux/watcher.ml	2012-09-24 11:44:38 UTC (rev 516)
+++ trunk/src/fsmonitor/linux/watcher.ml	2012-11-20 11:01:22 UTC (rev 517)
@@ -196,6 +196,8 @@
           Watchercommon.error
             ("error while handling events: " ^ Watchercommon.format_exc e)))
 
+let i = ref 0
+
 let release_watch file =
   match get_watch file with
     None ->
@@ -204,6 +206,7 @@
       set_watch file None;
       let s = IntSet.remove (get_id file) (Hashtbl.find watcher_by_id id) in
       if IntSet.is_empty s then begin
+        incr i; if !i mod 32 = 0 then Lwt_unix.run (Lwt_unix.yield ());
         begin try
           Lwt_inotify.rm_watch st id
           (* Will fail with EINVAL if the file has been deleted... *)
@@ -234,7 +237,14 @@
   with Inotify.Error (_, no) ->
     release_watch file;
     match no with
-      2 | 13 | 20 | 28 | 40 ->
+      2 (* ENOENT *) ->
+        Watchercommon.error
+          (Format.sprintf "file '%s' does not exist" path)
+    | 28 (* ENOSPC *) ->
+        Watchercommon.error "cannot add a watcher: system limit reached"
+    | 13 (* EACCES *) | 20 (* ENOTDIR *) | 40 (* ELOOP *) ->
+        (* These errors should be well handled by Unison (they will
+           result in errors during update detection *)
         ()
     | _ ->
         Watchercommon.error

Modified: trunk/src/fsmonitor/windows/watcher.ml
===================================================================
--- trunk/src/fsmonitor/windows/watcher.ml	2012-09-24 11:44:38 UTC (rev 516)
+++ trunk/src/fsmonitor/windows/watcher.ml	2012-11-20 11:01:22 UTC (rev 517)
@@ -188,10 +188,10 @@
       try
         watch_info.handle <- Some (watch_root_directory path file)
       with Unix.Unix_error _ as e ->
-        if !Watchercommon.debug then
-          Format.eprintf
-            "Error while starting to watch for changes: %s at ."
-            (Watchercommon.format_exc e)
+        Watchercommon.error
+          (Format.sprintf
+             "Error while starting to watch for changes: %s at ."
+             (Watchercommon.format_exc e))
     end;
     let mapping =
       try Shortnames.in_directory path with Unix.Unix_error _ -> [] in

Modified: trunk/src/mkProjectInfo.ml
===================================================================
--- trunk/src/mkProjectInfo.ml	2012-09-24 11:44:38 UTC (rev 516)
+++ trunk/src/mkProjectInfo.ml	2012-11-20 11:01:22 UTC (rev 517)
@@ -88,3 +88,4 @@
 
 
 
+



More information about the Unison-hackers mailing list