Enable inotify on systems with inotify_init yet no init1 variant
* configure.ac (HAVE_INOTIFY): Check for the presence of inotify_init in addition to inotify_init1. * src/inotify.c (Finotify_add_watch): Implement with inotify_init if inotify_init1 is absent.
This commit is contained in:
parent
b214cb2843
commit
39a8423270
2 changed files with 14 additions and 4 deletions
|
@ -4088,16 +4088,16 @@ case $with_file_notification,$opsys in
|
|||
fi ;;
|
||||
esac
|
||||
|
||||
dnl inotify is available only on GNU/Linux.
|
||||
dnl inotify is available only on Linux-kernel based systems.
|
||||
case $with_file_notification,$NOTIFY_OBJ in
|
||||
inotify, | yes,)
|
||||
AC_CHECK_HEADER([sys/inotify.h])
|
||||
if test "$ac_cv_header_sys_inotify_h" = yes ; then
|
||||
AC_CHECK_FUNC([inotify_init1])
|
||||
if test "$ac_cv_func_inotify_init1" = yes; then
|
||||
AC_CHECK_FUNCS([inotify_init inotify_init1])
|
||||
if test "$ac_cv_func_inotify_init" = yes; then
|
||||
AC_DEFINE([HAVE_INOTIFY], [1], [Define to 1 to use inotify.])
|
||||
NOTIFY_OBJ=inotify.o
|
||||
NOTIFY_SUMMARY="yes -lglibc (inotify)"
|
||||
NOTIFY_SUMMARY="yes (inotify)"
|
||||
fi
|
||||
fi ;;
|
||||
esac
|
||||
|
|
|
@ -26,6 +26,8 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
|
|||
#include "termhooks.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <sys/inotify.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
|
@ -434,7 +436,15 @@ IN_ONESHOT */)
|
|||
|
||||
if (inotifyfd < 0)
|
||||
{
|
||||
#ifdef HAVE_INOTIFY_INIT1
|
||||
inotifyfd = inotify_init1 (IN_NONBLOCK | IN_CLOEXEC);
|
||||
#else /* !HAVE_INOTIFY_INIT1 */
|
||||
/* This is prey to race conditions with other threads calling
|
||||
exec. */
|
||||
inotifyfd = inotify_init ();
|
||||
fcntl (inotifyfd, F_SETFL, O_NONBLOCK);
|
||||
fcntl (inotifyfd, F_SETFD, O_CLOEXEC);
|
||||
#endif /* HAVE_INOTIFY_INIT1 */
|
||||
if (inotifyfd < 0)
|
||||
report_file_notify_error ("File watching is not available", Qnil);
|
||||
watch_list = Qnil;
|
||||
|
|
Loading…
Add table
Reference in a new issue