gio-kqueue: use O_EVTONLY on MacOS

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
This commit is contained in:
Antoine Jacoutot 2012-11-17 09:44:48 +01:00
parent ef8510be09
commit 596f96b08d
2 changed files with 9 additions and 0 deletions

View File

@ -21,6 +21,7 @@
THE SOFTWARE. THE SOFTWARE.
*******************************************************************************/ *******************************************************************************/
#include <fcntl.h>
#include <glib.h> #include <glib.h>
#include <gio/gio.h> #include <gio/gio.h>
#include "kqueue-exclusions.h" #include "kqueue-exclusions.h"
@ -38,6 +39,9 @@ static gboolean ke_debug_enabled = FALSE;
gboolean gboolean
_ke_is_excluded (const char *full_path) _ke_is_excluded (const char *full_path)
{ {
#if defined (O_EVTONLY)
return FALSE;
#else
GFile *f = NULL; GFile *f = NULL;
GMount *mount = NULL; GMount *mount = NULL;
@ -57,4 +61,5 @@ _ke_is_excluded (const char *full_path)
} }
else else
return FALSE; return FALSE;
#endif
} }

View File

@ -512,7 +512,11 @@ _kh_start_watching (kqueue_sub *sub)
g_assert (sub->filename != NULL); g_assert (sub->filename != NULL);
/* kqueue requires a file descriptor to monitor. Sad but true */ /* 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); sub->fd = open (sub->filename, O_RDONLY);
#endif
if (sub->fd == -1) if (sub->fd == -1)
{ {