gio-kqueue: use O_EVTONLY on MacOS
authorAntoine Jacoutot <ajacoutot@gnome.org>
Sat, 17 Nov 2012 08:44:48 +0000 (09:44 +0100)
committerAntoine Jacoutot <ajacoutot@gnome.org>
Sat, 17 Nov 2012 15:32:23 +0000 (16:32 +0100)
MacOS provides the O_EVTONLY flag to open(2) which allow to open a file
for monitoring without preventing an unmount of the volume that contains
it.

https://bugzilla.gnome.org/show_bug.cgi?id=688518

gio/kqueue/kqueue-exclusions.c
gio/kqueue/kqueue-helper.c

index 4133916..6be0e73 100644 (file)
@@ -21,6 +21,7 @@
   THE SOFTWARE.
 *******************************************************************************/
 
+#include <fcntl.h>
 #include <glib.h>
 #include <gio/gio.h>
 #include "kqueue-exclusions.h"
@@ -38,6 +39,9 @@ static gboolean ke_debug_enabled = FALSE;
 gboolean
 _ke_is_excluded (const char *full_path)
 {
+#if defined (O_EVTONLY)
+  return FALSE;
+#else
   GFile *f = NULL;
   GMount *mount = NULL;
 
@@ -57,4 +61,5 @@ _ke_is_excluded (const char *full_path)
   }
   else
     return FALSE;
+#endif
 }
index ba5a140..87f4032 100644 (file)
@@ -512,7 +512,11 @@ _kh_start_watching (kqueue_sub *sub)
   g_assert (sub->filename != NULL);
 
   /* kqueue requires a file descriptor to monitor. Sad but true */
+#if defined (O_EVTONLY)
+  sub->fd = open (sub->filename, O_EVTONLY);
+#else
   sub->fd = open (sub->filename, O_RDONLY);
+#endif
 
   if (sub->fd == -1)
     {