GNU bug report logs - #21241
25.0.50; gfilenotify doesn't indicate when limits are reached

Previous Next

Package: emacs;

Reported by: Tassilo Horn <tsdh <at> gnu.org>

Date: Wed, 12 Aug 2015 08:18:02 UTC

Severity: normal

Found in version 25.0.50

Done: Paul Eggert <eggert <at> cs.ucla.edu>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 21241 in the body.
You can then email your comments to 21241 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#21241; Package emacs. (Wed, 12 Aug 2015 08:18:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Tassilo Horn <tsdh <at> gnu.org>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Wed, 12 Aug 2015 08:18:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Tassilo Horn <tsdh <at> gnu.org>
To: bug-gnu-emacs <at> gnu.org
Subject: 25.0.50; gfilenotify doesn't indicate when limits are reached
Date: Wed, 12 Aug 2015 10:16:54 +0200
When acquiring many file/directory watches using file-notify-add-watch
with file-notify--library being gfilenotify, there's no indication when
the limit of watches a user is allowed to place is reached.  You still
get a valid descriptor but the provided callback function won't be
called when the watched file/directory changes.

I've looked at the code and saw that with inotify you'd get an error.
Apparently, gfilenotify (aka glib) also uses inotify on my GNU/Linux box
under the hoods.  At least increasing the inotify limit for user watches
made it work again.

I tried looking at the GFileMonitor API docs.  It seems that
g_file_monitor should return NULL on errors (and I'd count a reached
limit an error), and the fourth parameter should be initialized with the
error.  Emacs calls it with no error parameter:

  monitor = g_file_monitor (gfile, gflags, NULL, NULL);

So I've tried the following:

--8<---------------cut here---------------start------------->8---
diff --git a/src/gfilenotify.c b/src/gfilenotify.c
index 08713a8..2ad2110 100644
--- a/src/gfilenotify.c
+++ b/src/gfilenotify.c
@@ -172,8 +172,9 @@ will be reported only in case of the 'moved' event.  */)
     gflags |= G_FILE_MONITOR_SEND_MOVED;
 
   /* Enable watch.  */
-  monitor = g_file_monitor (gfile, gflags, NULL, NULL);
-  if (! monitor)
+  GError *err = NULL;
+  monitor = g_file_monitor (gfile, gflags, NULL, &err);
+  if (! monitor || err != NULL)
     xsignal2 (Qfile_notify_error, build_string ("Cannot watch file"), file);
 
   Lisp_Object watch_descriptor = make_pointer_integer (monitor);
--8<---------------cut here---------------end--------------->8---

Unfortunately, the err variable won't be set in case the limit is
reached, too.  So it seems that we can't do much from Emacs land and
this should be reported as a glib bug (which I'll do).

Well, one thing we could do was preferring plain inotify over glib's
GFileMonitor when both are available.  On my GNU/Linux box both are
available and configure chose gfilenotify as the default.



In GNU Emacs 25.0.50.3 (x86_64-unknown-linux-gnu, GTK+ Version 3.16.6)
 of 2015-08-12 on thinkpad-t440p
Repository revision: 197f280042a4d901ea94acdf10f1dc544fae4750
Windowing system distributor `The X.Org Foundation', version 11.0.11702000
System Description:	Arch Linux

Configured using:
 `configure 'CFLAGS=-g -ggdb3 -O1''

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GCONF GSETTINGS
NOTIFY ACL GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11

Important settings:
  value of $LC_MONETARY: de_DE.utf8
  value of $LC_NUMERIC: de_DE.utf8
  value of $LC_TIME: de_DE.utf8
  value of $LANG: en_US.utf8
  locale-coding-system: utf-8-unix

Major mode: Group

Minor modes in effect:
  rcirc-track-minor-mode: t
  hl-line-mode: t
  gnus-topic-mode: t
  global-company-mode: t
  global-aggressive-indent-mode: t
  gnus-undo-mode: t
  pdf-occur-global-minor-mode: t
  recentf-mode: t
  global-undo-tree-mode: t
  global-subword-mode: t
  subword-mode: t
  save-place-mode: t
  savehist-mode: t
  show-paren-mode: t
  ivy-mode: t
  minibuffer-depth-indicate-mode: t
  diff-auto-refine-mode: t
  global-git-commit-mode: t
  async-bytecomp-package-mode: t
  shell-dirtrack-mode: t
  electric-pair-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:
20150812T095021.253> Reading active file via nndraft...
20150812T095021.254> Reading active file via nndraft...done
20150812T095021.254> Reading active file from archive+nnml+archive:sent-postings via nnml...
20150812T095021.254> Opening nnml server on archive+nnml+archive:sent-postings...
20150812T095021.255> Opening nnml server on archive+nnml+archive:sent-postings...done
20150812T095021.255> nnml: Reading incoming mail (no new mail)...done
20150812T095021.255> Reading active file from archive+nnml+archive:sent-postings via nnml...
20150812T095021.256> Reading active file from archive+nnml+archive:sent-postings via nnml...done
20150812T095021.256> Checking new news...done
20150812T095021.257> No news is good news

Load-path shadows:
~/Repos/el/auctex/lpath hides ~/Repos/el/gnus/lisp/lpath
~/Repos/el/highlight-symbol.el/highlight-symbol hides /home/horn/.emacs.d/elpa/highlight-symbol-20150805.806/highlight-symbol
~/Repos/el/gnus/lisp/md4 hides /home/horn/Repos/el/emacs/lisp/md4
~/Repos/el/gnus/lisp/color hides /home/horn/Repos/el/emacs/lisp/color
~/Repos/el/gnus/lisp/format-spec hides /home/horn/Repos/el/emacs/lisp/format-spec
~/Repos/el/gnus/lisp/password-cache hides /home/horn/Repos/el/emacs/lisp/password-cache
~/Repos/el/gnus/lisp/hex-util hides /home/horn/Repos/el/emacs/lisp/hex-util
~/Repos/el/gnus/lisp/dns-mode hides /home/horn/Repos/el/emacs/lisp/textmodes/dns-mode
~/Repos/el/gnus/lisp/dig hides /home/horn/Repos/el/emacs/lisp/net/dig
~/Repos/el/gnus/lisp/hmac-md5 hides /home/horn/Repos/el/emacs/lisp/net/hmac-md5
~/Repos/el/gnus/lisp/ntlm hides /home/horn/Repos/el/emacs/lisp/net/ntlm
~/Repos/el/gnus/lisp/hmac-def hides /home/horn/Repos/el/emacs/lisp/net/hmac-def
~/Repos/el/gnus/lisp/rfc2104 hides /home/horn/Repos/el/emacs/lisp/net/rfc2104
~/Repos/el/gnus/lisp/sasl-ntlm hides /home/horn/Repos/el/emacs/lisp/net/sasl-ntlm
~/Repos/el/gnus/lisp/sasl-cram hides /home/horn/Repos/el/emacs/lisp/net/sasl-cram
~/Repos/el/gnus/lisp/dns hides /home/horn/Repos/el/emacs/lisp/net/dns
~/Repos/el/gnus/lisp/sasl hides /home/horn/Repos/el/emacs/lisp/net/sasl
~/Repos/el/gnus/lisp/tls hides /home/horn/Repos/el/emacs/lisp/net/tls
~/Repos/el/gnus/lisp/sasl-scram-rfc hides /home/horn/Repos/el/emacs/lisp/net/sasl-scram-rfc
~/Repos/el/gnus/lisp/netrc hides /home/horn/Repos/el/emacs/lisp/net/netrc
~/Repos/el/gnus/lisp/sasl-digest hides /home/horn/Repos/el/emacs/lisp/net/sasl-digest
~/Repos/el/gnus/lisp/uudecode hides /home/horn/Repos/el/emacs/lisp/mail/uudecode
~/Repos/el/gnus/lisp/binhex hides /home/horn/Repos/el/emacs/lisp/mail/binhex
~/Repos/el/gnus/lisp/hashcash hides /home/horn/Repos/el/emacs/lisp/mail/hashcash
~/Repos/el/gnus/lisp/canlock hides /home/horn/Repos/el/emacs/lisp/gnus/canlock
~/Repos/el/gnus/lisp/nneething hides /home/horn/Repos/el/emacs/lisp/gnus/nneething
~/Repos/el/gnus/lisp/mm-encode hides /home/horn/Repos/el/emacs/lisp/gnus/mm-encode
~/Repos/el/gnus/lisp/mm-util hides /home/horn/Repos/el/emacs/lisp/gnus/mm-util
~/Repos/el/gnus/lisp/rfc2047 hides /home/horn/Repos/el/emacs/lisp/gnus/rfc2047
~/Repos/el/gnus/lisp/nnml hides /home/horn/Repos/el/emacs/lisp/gnus/nnml
~/Repos/el/gnus/lisp/gnus-cus hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-cus
~/Repos/el/gnus/lisp/gnus-range hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-range
~/Repos/el/gnus/lisp/gnus-int hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-int
~/Repos/el/gnus/lisp/gnus-cloud hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-cloud
~/Repos/el/gnus/lisp/spam-stat hides /home/horn/Repos/el/emacs/lisp/gnus/spam-stat
~/Repos/el/gnus/lisp/nnmh hides /home/horn/Repos/el/emacs/lisp/gnus/nnmh
~/Repos/el/gnus/lisp/gnus-mlspl hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-mlspl
~/Repos/el/gnus/lisp/deuglify hides /home/horn/Repos/el/emacs/lisp/gnus/deuglify
~/Repos/el/gnus/lisp/gnus-gravatar hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-gravatar
~/Repos/el/gnus/lisp/nngateway hides /home/horn/Repos/el/emacs/lisp/gnus/nngateway
~/Repos/el/gnus/lisp/ietf-drums hides /home/horn/Repos/el/emacs/lisp/gnus/ietf-drums
~/Repos/el/gnus/lisp/mail-parse hides /home/horn/Repos/el/emacs/lisp/gnus/mail-parse
~/Repos/el/gnus/lisp/gnus-salt hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-salt
~/Repos/el/gnus/lisp/nnimap hides /home/horn/Repos/el/emacs/lisp/gnus/nnimap
~/Repos/el/gnus/lisp/gnus-draft hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-draft
~/Repos/el/gnus/lisp/mail-source hides /home/horn/Repos/el/emacs/lisp/gnus/mail-source
~/Repos/el/gnus/lisp/messcompat hides /home/horn/Repos/el/emacs/lisp/gnus/messcompat
~/Repos/el/gnus/lisp/pop3 hides /home/horn/Repos/el/emacs/lisp/gnus/pop3
~/Repos/el/gnus/lisp/nnmaildir hides /home/horn/Repos/el/emacs/lisp/gnus/nnmaildir
~/Repos/el/gnus/lisp/nnheader hides /home/horn/Repos/el/emacs/lisp/gnus/nnheader
~/Repos/el/gnus/lisp/gnus-cite hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-cite
~/Repos/el/gnus/lisp/nndiary hides /home/horn/Repos/el/emacs/lisp/gnus/nndiary
~/Repos/el/gnus/lisp/gnus-diary hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-diary
~/Repos/el/gnus/lisp/nnfolder hides /home/horn/Repos/el/emacs/lisp/gnus/nnfolder
~/Repos/el/gnus/lisp/gnus-art hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-art
~/Repos/el/gnus/lisp/gnus-demon hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-demon
~/Repos/el/gnus/lisp/mml-sec hides /home/horn/Repos/el/emacs/lisp/gnus/mml-sec
~/Repos/el/gnus/lisp/nnir hides /home/horn/Repos/el/emacs/lisp/gnus/nnir
~/Repos/el/gnus/lisp/mm-partial hides /home/horn/Repos/el/emacs/lisp/gnus/mm-partial
~/Repos/el/gnus/lisp/gnus-registry hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-registry
~/Repos/el/gnus/lisp/gnus-icalendar hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-icalendar
~/Repos/el/gnus/lisp/compface hides /home/horn/Repos/el/emacs/lisp/gnus/compface
~/Repos/el/gnus/lisp/gnus-fun hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-fun
~/Repos/el/gnus/lisp/gnus-start hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-start
~/Repos/el/gnus/lisp/smiley hides /home/horn/Repos/el/emacs/lisp/gnus/smiley
~/Repos/el/gnus/lisp/gnus-picon hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-picon
~/Repos/el/gnus/lisp/spam-report hides /home/horn/Repos/el/emacs/lisp/gnus/spam-report
~/Repos/el/gnus/lisp/nntp hides /home/horn/Repos/el/emacs/lisp/gnus/nntp
~/Repos/el/gnus/lisp/nnnil hides /home/horn/Repos/el/emacs/lisp/gnus/nnnil
~/Repos/el/gnus/lisp/nndir hides /home/horn/Repos/el/emacs/lisp/gnus/nndir
~/Repos/el/gnus/lisp/gnus-srvr hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-srvr
~/Repos/el/gnus/lisp/smime hides /home/horn/Repos/el/emacs/lisp/gnus/smime
~/Repos/el/gnus/lisp/nnvirtual hides /home/horn/Repos/el/emacs/lisp/gnus/nnvirtual
~/Repos/el/gnus/lisp/gnus-notifications hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-notifications
~/Repos/el/gnus/lisp/nnspool hides /home/horn/Repos/el/emacs/lisp/gnus/nnspool
~/Repos/el/gnus/lisp/gnus-group hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-group
~/Repos/el/gnus/lisp/gnus-bcklg hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-bcklg
~/Repos/el/gnus/lisp/gnus-util hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-util
~/Repos/el/gnus/lisp/gnus-sieve hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-sieve
~/Repos/el/gnus/lisp/nndraft hides /home/horn/Repos/el/emacs/lisp/gnus/nndraft
~/Repos/el/gnus/lisp/nnagent hides /home/horn/Repos/el/emacs/lisp/gnus/nnagent
~/Repos/el/gnus/lisp/gnus-spec hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-spec
~/Repos/el/gnus/lisp/gnus-bookmark hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-bookmark
~/Repos/el/gnus/lisp/mml1991 hides /home/horn/Repos/el/emacs/lisp/gnus/mml1991
~/Repos/el/gnus/lisp/rfc2231 hides /home/horn/Repos/el/emacs/lisp/gnus/rfc2231
~/Repos/el/gnus/lisp/yenc hides /home/horn/Repos/el/emacs/lisp/gnus/yenc
~/Repos/el/gnus/lisp/gnus-undo hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-undo
~/Repos/el/gnus/lisp/ecomplete hides /home/horn/Repos/el/emacs/lisp/gnus/ecomplete
~/Repos/el/gnus/lisp/legacy-gnus-agent hides /home/horn/Repos/el/emacs/lisp/gnus/legacy-gnus-agent
~/Repos/el/gnus/lisp/utf7 hides /home/horn/Repos/el/emacs/lisp/gnus/utf7
~/Repos/el/gnus/lisp/rtree hides /home/horn/Repos/el/emacs/lisp/gnus/rtree
~/Repos/el/gnus/lisp/gnus-uu hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-uu
~/Repos/el/gnus/lisp/gnus-ml hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-ml
~/Repos/el/gnus/lisp/sieve hides /home/horn/Repos/el/emacs/lisp/gnus/sieve
~/Repos/el/gnus/lisp/gnus hides /home/horn/Repos/el/emacs/lisp/gnus/gnus
~/Repos/el/gnus/lisp/mml hides /home/horn/Repos/el/emacs/lisp/gnus/mml
~/Repos/el/gnus/lisp/message hides /home/horn/Repos/el/emacs/lisp/gnus/message
~/Repos/el/gnus/lisp/mml-smime hides /home/horn/Repos/el/emacs/lisp/gnus/mml-smime
~/Repos/el/gnus/lisp/gnus-eform hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-eform
~/Repos/el/gnus/lisp/gnus-agent hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-agent
~/Repos/el/gnus/lisp/gnus-logic hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-logic
~/Repos/el/gnus/lisp/mm-extern hides /home/horn/Repos/el/emacs/lisp/gnus/mm-extern
~/Repos/el/gnus/lisp/nndoc hides /home/horn/Repos/el/emacs/lisp/gnus/nndoc
~/Repos/el/gnus/lisp/sieve-manage hides /home/horn/Repos/el/emacs/lisp/gnus/sieve-manage
~/Repos/el/gnus/lisp/mm-decode hides /home/horn/Repos/el/emacs/lisp/gnus/mm-decode
~/Repos/el/gnus/lisp/starttls hides /home/horn/Repos/el/emacs/lisp/gnus/starttls
~/Repos/el/gnus/lisp/gnus-dired hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-dired
~/Repos/el/gnus/lisp/nnbabyl hides /home/horn/Repos/el/emacs/lisp/gnus/nnbabyl
~/Repos/el/gnus/lisp/nnmbox hides /home/horn/Repos/el/emacs/lisp/gnus/nnmbox
~/Repos/el/gnus/lisp/gnus-win hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-win
~/Repos/el/gnus/lisp/gnus-async hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-async
~/Repos/el/gnus/lisp/mm-url hides /home/horn/Repos/el/emacs/lisp/gnus/mm-url
~/Repos/el/gnus/lisp/gnus-html hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-html
~/Repos/el/gnus/lisp/gssapi hides /home/horn/Repos/el/emacs/lisp/gnus/gssapi
~/Repos/el/gnus/lisp/mml2015 hides /home/horn/Repos/el/emacs/lisp/gnus/mml2015
~/Repos/el/gnus/lisp/nnrss hides /home/horn/Repos/el/emacs/lisp/gnus/nnrss
~/Repos/el/gnus/lisp/gnus-mh hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-mh
~/Repos/el/gnus/lisp/gnus-sum hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-sum
~/Repos/el/gnus/lisp/nnweb hides /home/horn/Repos/el/emacs/lisp/gnus/nnweb
~/Repos/el/gnus/lisp/mail-prsvr hides /home/horn/Repos/el/emacs/lisp/gnus/mail-prsvr
~/Repos/el/gnus/lisp/nnmairix hides /home/horn/Repos/el/emacs/lisp/gnus/nnmairix
~/Repos/el/gnus/lisp/plstore hides /home/horn/Repos/el/emacs/lisp/gnus/plstore
~/Repos/el/gnus/lisp/rfc2045 hides /home/horn/Repos/el/emacs/lisp/gnus/rfc2045
~/Repos/el/gnus/lisp/gnus-msg hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-msg
~/Repos/el/gnus/lisp/spam-wash hides /home/horn/Repos/el/emacs/lisp/gnus/spam-wash
~/Repos/el/gnus/lisp/gnus-score hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-score
~/Repos/el/gnus/lisp/mm-uu hides /home/horn/Repos/el/emacs/lisp/gnus/mm-uu
~/Repos/el/gnus/lisp/spam hides /home/horn/Repos/el/emacs/lisp/gnus/spam
~/Repos/el/gnus/lisp/mm-view hides /home/horn/Repos/el/emacs/lisp/gnus/mm-view
~/Repos/el/gnus/lisp/sieve-mode hides /home/horn/Repos/el/emacs/lisp/gnus/sieve-mode
~/Repos/el/gnus/lisp/html2text hides /home/horn/Repos/el/emacs/lisp/gnus/html2text
~/Repos/el/gnus/lisp/gnus-ems hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-ems
~/Repos/el/gnus/lisp/registry hides /home/horn/Repos/el/emacs/lisp/gnus/registry
~/Repos/el/gnus/lisp/auth-source hides /home/horn/Repos/el/emacs/lisp/gnus/auth-source
~/Repos/el/gnus/lisp/gravatar hides /home/horn/Repos/el/emacs/lisp/gnus/gravatar
~/Repos/el/gnus/lisp/flow-fill hides /home/horn/Repos/el/emacs/lisp/gnus/flow-fill
~/Repos/el/gnus/lisp/gmm-utils hides /home/horn/Repos/el/emacs/lisp/gnus/gmm-utils
~/Repos/el/gnus/lisp/mailcap hides /home/horn/Repos/el/emacs/lisp/gnus/mailcap
~/Repos/el/gnus/lisp/gnus-delay hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-delay
~/Repos/el/gnus/lisp/mm-bodies hides /home/horn/Repos/el/emacs/lisp/gnus/mm-bodies
~/Repos/el/gnus/lisp/mm-archive hides /home/horn/Repos/el/emacs/lisp/gnus/mm-archive
~/Repos/el/gnus/lisp/rfc1843 hides /home/horn/Repos/el/emacs/lisp/gnus/rfc1843
~/Repos/el/gnus/lisp/gnus-kill hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-kill
~/Repos/el/gnus/lisp/qp hides /home/horn/Repos/el/emacs/lisp/gnus/qp
~/Repos/el/gnus/lisp/score-mode hides /home/horn/Repos/el/emacs/lisp/gnus/score-mode
~/Repos/el/gnus/lisp/gnus-topic hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-topic
~/Repos/el/gnus/lisp/gnus-cache hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-cache
~/Repos/el/gnus/lisp/nnmail hides /home/horn/Repos/el/emacs/lisp/gnus/nnmail
~/Repos/el/gnus/lisp/gnus-vm hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-vm
~/Repos/el/gnus/lisp/gnus-sync hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-sync
~/Repos/el/gnus/lisp/nnoo hides /home/horn/Repos/el/emacs/lisp/gnus/nnoo
~/Repos/el/gnus/lisp/nnregistry hides /home/horn/Repos/el/emacs/lisp/gnus/nnregistry
~/Repos/el/gnus/lisp/gnus-dup hides /home/horn/Repos/el/emacs/lisp/gnus/gnus-dup
~/Repos/el/gnus/lisp/parse-time hides /home/horn/Repos/el/emacs/lisp/calendar/parse-time
~/Repos/el/gnus/lisp/time-date hides /home/horn/Repos/el/emacs/lisp/calendar/time-date

Features:
(shadow emacsbug sendmail browse-url hippie-exp eieio-opt speedbar
sb-image ezimage dframe linum flow-fill misearch multi-isearch vc
vc-dispatcher vc-git url-http url-gw url-auth sort gnus-cite mm-archive
gnus-async gnus-bcklg qp gnus-ml smiley rcirc-color rcirc-controls
rcirc-late-fix rcirc hl-line nndraft nnmh rot13 utf-7 gnutls
network-stream nsm starttls nnml nnnil gnus-agent gnus-srvr gnus-score
score-mode nnvirtual gnus-cache gnus-demon nntp spam spam-stat gnus-uu
yenc gnus-msg gnus-gravatar mail-extr gravatar gnus-topic nnir
gnus-registry registry eieio-compat eieio-base th-private colir color
smex ido company-files company-oddmuse company-keywords company-etags
company-gtags company-dabbrev-code company-dabbrev company-capf
company-cmake company-xcode company-clang company-semantic company-eclim
company-template company-css company-nxml company-bbdb company
stratego-mode greql-mode tg-mode generic preview-latex tex-site
auto-loads cider cider-debug cider-browse-ns cider-inspector cider-mode
cider-repl cider-eldoc cider-interaction arc-mode archive-mode
cider-overlays cider-doc org-table org org-macro org-footnote
org-pcomplete org-list org-faces org-entities org-version ob-emacs-lisp
ob ob-tangle ob-ref ob-lob ob-table ob-exp org-src ob-keys ob-comint
ob-core ob-eval org-compat org-macs org-loaddefs find-func cal-menu
calendar cal-loaddefs cider-test cider-stacktrace cider-client
nrepl-client queue cider-util ewoc etags xref project clojure-mode
paredit aggressive-indent epa-file epa epg rdictcc
google-contacts-message google-contacts derived xml url-cache
google-oauth google-contacts-gnus gnus-art mm-uu mml2015 mm-view
mml-smime smime dig gnus-sum gnus-group gnus-undo gnus-start gnus-cloud
nnimap nnmail mail-source tls utf7 netrc nnoo parse-time gnus-spec
gnus-int gnus-range gnus-win gnus gnus-ems gnus-compat url url-proxy
url-privacy url-expand url-methods url-history url-cookie url-domsuf
url-util url-parse url-vars mailcap nnheader dired-x em-term term ehelp
esh-opt esh-ext esh-util highlight-symbol thingatpt boxquote rect
ecomplete yasnippet disp-table noutline outline pdf-occur ibuf-ext
ibuffer tablist tablist-filter semantic/wisent/comp semantic/wisent
semantic/wisent/wisent semantic/util-modes semantic/util semantic
semantic/tag semantic/lex semantic/fw mode-local cedet pdf-isearch
let-alist pdf-misc imenu pdf-tools compile cus-edit cus-start cus-load
pdf-view bookmark pp jka-compr pdf-cache pdf-info tq pdf-util image-mode
browse-kill-ring recentf tree-widget wid-edit highlight-parentheses cl
undo-tree diff iedit iedit-lib hydra lv counsel swiper cap-words
superword subword saveplace savehist paren ivy delsel icomplete mb-depth
ace-window avy magit-filenotify filenotify magit-blame magit-stash
magit-bisect magit-remote magit-commit magit-sequence magit magit-apply
magit-wip magit-log magit-diff smerge-mode diff-mode magit-core
magit-process magit-popup magit-mode magit-git crm magit-section
magit-utils git-commit log-edit easy-mmode message dired rfc822 mml
mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045
ietf-drums mailabbrev mail-utils gmm-utils mailheader pcvs-util add-log
with-editor async-bytecomp async tramp-sh tramp tramp-compat auth-source
eieio byte-opt bytecomp byte-compile cl-extra seq cconv eieio-core
cl-macs gv gnus-util mm-util help-fns help-mode mail-prsvr
password-cache tramp-loaddefs trampver shell pcomplete comint ansi-color
ring format-spec server dash smart-mode-line-respectful-theme
smart-mode-line-light-theme cl-seq smart-mode-line rich-minority rx bs
elec-pair edmacro kmacro cl-loaddefs cl-lib gnus-load subr-x pcase
tsdh-light-theme finder-inf memory-usage-autoloads advice info package
easymenu epg-config time-date mule-util tooltip eldoc electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel x-win term/common-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment
elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow timer
select scroll-bar mouse jit-lock font-lock syntax facemenu font-core
frame cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan
thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian
slovak czech european ethiopic indian cyrillic chinese charscript
case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote dbusbind gfilenotify
dynamic-setting system-font-setting font-render-setting move-toolbar gtk
x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 2203543 130351)
 (symbols 48 58842 76)
 (miscs 40 808 1443)
 (strings 32 181035 59773)
 (string-bytes 1 6176131)
 (vectors 16 61077)
 (vector-slots 8 1970775 197250)
 (floats 8 963 1376)
 (intervals 56 18899 3078)
 (buffers 976 73)
 (heap 1024 134316 38901))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#21241; Package emacs. (Wed, 12 Aug 2015 08:35:02 GMT) Full text and rfc822 format available.

Message #8 received at 21241 <at> debbugs.gnu.org (full text, mbox):

From: Tassilo Horn <tsdh <at> gnu.org>
To: 21241 <at> debbugs.gnu.org
Subject: Re: 25.0.50; gfilenotify doesn't indicate when limits are reached
Date: Wed, 12 Aug 2015 10:34:45 +0200
Here's the glib bug report I've just filed for this issue:

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

Bye,
Tassilo




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#21241; Package emacs. (Wed, 12 Aug 2015 12:48:02 GMT) Full text and rfc822 format available.

Message #11 received at 21241 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Tassilo Horn <tsdh <at> gnu.org>
Cc: 21241 <at> debbugs.gnu.org
Subject: Re: bug#21241: 25.0.50;
 gfilenotify doesn't indicate when limits are reached
Date: Wed, 12 Aug 2015 15:47:00 +0300
> From: Tassilo Horn <tsdh <at> gnu.org>
> Date: Wed, 12 Aug 2015 10:16:54 +0200
> 
> Well, one thing we could do was preferring plain inotify over glib's
> GFileMonitor when both are available.  On my GNU/Linux box both are
> available and configure chose gfilenotify as the default.

I wonder if we should revert our decision to prefer gfilenotify if
available, and instead use it only if there's no other supported
method.  It begins to sound more and more like gfilenotify is more
trouble than it's worth.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#21241; Package emacs. (Wed, 12 Aug 2015 13:28:02 GMT) Full text and rfc822 format available.

Message #14 received at 21241 <at> debbugs.gnu.org (full text, mbox):

From: Tassilo Horn <tsdh <at> gnu.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 21241 <at> debbugs.gnu.org
Subject: Re: bug#21241: 25.0.50;
 gfilenotify doesn't indicate when limits are reached
Date: Wed, 12 Aug 2015 15:27:26 +0200
Eli Zaretskii <eliz <at> gnu.org> writes:

>> Well, one thing we could do was preferring plain inotify over glib's
>> GFileMonitor when both are available.  On my GNU/Linux box both are
>> available and configure chose gfilenotify as the default.
>
> I wonder if we should revert our decision to prefer gfilenotify if
> available, and instead use it only if there's no other supported
> method.  It begins to sound more and more like gfilenotify is more
> trouble than it's worth.

You mean the other emacs-devel thread where it has been reported that
gfile notifications might get delayed up to 30 seconds?  I haven't seen
that issue here but if it can happen and gfilenotify doesn't provide
some clear benefit over plain inotify, I'd suggest to use the latter by
default when it's available.

Well, at least it seems that THIS issue is considered to be a bug also
by one glib developer so chances are good that it'll be fixed
eventually.  But of course it may take some time until a fixed version
is distributed to all users and until then users will have to learn the
hard way why notifications don't work [1].

Bye,
Tassilo

[1] I've been working on magit-filenotify.el which automatically
    refreshes the magit status buffer when something in the git
    repository changes, and at some point it just didn't work anymore
    (no notifications) for repositories I've started working on later
    while it still worked for those I've had opened earlier.  Well, that
    way I've at least learned about inotify limits and how to change
    them... :-)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#21241; Package emacs. (Wed, 12 Aug 2015 14:18:01 GMT) Full text and rfc822 format available.

Message #17 received at 21241 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Tassilo Horn <tsdh <at> gnu.org>
Cc: 21241 <at> debbugs.gnu.org
Subject: Re: bug#21241: 25.0.50;
 gfilenotify doesn't indicate when limits are reached
Date: Wed, 12 Aug 2015 17:16:12 +0300
> From: Tassilo Horn <tsdh <at> gnu.org>
> Cc: 21241 <at> debbugs.gnu.org
> Date: Wed, 12 Aug 2015 15:27:26 +0200
> 
> Eli Zaretskii <eliz <at> gnu.org> writes:
> 
> >> Well, one thing we could do was preferring plain inotify over glib's
> >> GFileMonitor when both are available.  On my GNU/Linux box both are
> >> available and configure chose gfilenotify as the default.
> >
> > I wonder if we should revert our decision to prefer gfilenotify if
> > available, and instead use it only if there's no other supported
> > method.  It begins to sound more and more like gfilenotify is more
> > trouble than it's worth.
> 
> You mean the other emacs-devel thread where it has been reported that
> gfile notifications might get delayed up to 30 seconds?

That, and this bug, and also the fact that it simply doesn't work on
Windows (no notifications come in), although the corresponding glib
tests all pass.  There's also bug#20417, and I think someone also
complained about gfilenotify on OS X.

> Well, at least it seems that THIS issue is considered to be a bug also
> by one glib developer so chances are good that it'll be fixed
> eventually.

Let's hope it will be.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#21241; Package emacs. (Wed, 12 Aug 2015 19:19:01 GMT) Full text and rfc822 format available.

Message #20 received at 21241 <at> debbugs.gnu.org (full text, mbox):

From: Michael Albinus <michael.albinus <at> gmx.de>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 21241 <at> debbugs.gnu.org, Tassilo Horn <tsdh <at> gnu.org>
Subject: Re: bug#21241: 25.0.50;
 gfilenotify doesn't indicate when limits are reached
Date: Wed, 12 Aug 2015 21:18:45 +0200
Eli Zaretskii <eliz <at> gnu.org> writes:

>> > I wonder if we should revert our decision to prefer gfilenotify if
>> > available, and instead use it only if there's no other supported
>> > method.  It begins to sound more and more like gfilenotify is more
>> > trouble than it's worth.
>> 
>> You mean the other emacs-devel thread where it has been reported that
>> gfile notifications might get delayed up to 30 seconds?
>
> That, and this bug, and also the fact that it simply doesn't work on
> Windows (no notifications come in), although the corresponding glib
> tests all pass.  There's also bug#20417, and I think someone also
> complained about gfilenotify on OS X.

I would also agree to favor inotify when available.

On OS X (better: on systems which have defined HAVE_NS), we should
disable gfilenotify, because the Glib main loop won't be used (ns_select
is used rather than xg_select).

Best regards, Michael.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#21241; Package emacs. (Sat, 15 Aug 2015 01:28:01 GMT) Full text and rfc822 format available.

Message #23 received at 21241 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Michael Albinus <michael.albinus <at> gmx.de>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 21241 <at> debbugs.gnu.org,
 Tassilo Horn <tsdh <at> gnu.org>
Subject: Re: 25.0.50; gfilenotify doesn't indicate when limits are reached
Date: Fri, 14 Aug 2015 18:27:39 -0700
[Message part 1 (text/plain, inline)]
Michael Albinus writes:

> I would also agree to favor inotify when available.

Let's give that a try, then.  I installed the attached patch as master commit 
200c2b10faf298bf65e8b6dbd0cb9ef00b2f95d6.

> On OS X (better: on systems which have defined HAVE_NS), we should
> disable gfilenotify, because the Glib main loop won't be used (ns_select
> is used rather than xg_select).

configure.ac was trying to do that, but there was a typo.  Should also be fixed 
in the attached patch.
[0001-Default-to-inotify-instead-of-gfile.patch (text/x-diff, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#21241; Package emacs. (Tue, 18 Aug 2015 14:34:02 GMT) Full text and rfc822 format available.

Message #26 received at 21241 <at> debbugs.gnu.org (full text, mbox):

From: Tassilo Horn <tsdh <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: Michael Albinus <michael.albinus <at> gmx.de>, 21241 <at> debbugs.gnu.org
Subject: Re: bug#21241: 25.0.50;
 gfilenotify doesn't indicate when limits are reached
Date: Tue, 18 Aug 2015 16:33:56 +0200
Paul Eggert <eggert <at> cs.ucla.edu> writes:

>> I would also agree to favor inotify when available.
>
> Let's give that a try, then.  I installed the attached patch as master
> commit 200c2b10faf298bf65e8b6dbd0cb9ef00b2f95d6.

FWIW, all my file-notification needs are still satisfied with inotify as
`file-notify--library', and now I also get an error when I run out of
allowed used watches.  So from my side, feel free to close this report
as gfilenotify's broken behavior is glib's bug, not ours.

Bye,
Tassilo




Reply sent to Paul Eggert <eggert <at> cs.ucla.edu>:
You have taken responsibility. (Tue, 18 Aug 2015 17:10:03 GMT) Full text and rfc822 format available.

Notification sent to Tassilo Horn <tsdh <at> gnu.org>:
bug acknowledged by developer. (Tue, 18 Aug 2015 17:10:04 GMT) Full text and rfc822 format available.

Message #31 received at 21241-done <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Tassilo Horn <tsdh <at> gnu.org>
Cc: Michael Albinus <michael.albinus <at> gmx.de>, 21241-done <at> debbugs.gnu.org
Subject: Re: bug#21241: 25.0.50; gfilenotify doesn't indicate when limits
 are reached
Date: Tue, 18 Aug 2015 10:09:03 -0700
Tassilo Horn wrote:
> So from my side, feel free to close this report
> as gfilenotify's broken behavior is glib's bug, not ours.

Thanks for checking; closing the bug.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#21241; Package emacs. (Fri, 21 Aug 2015 09:47:01 GMT) Full text and rfc822 format available.

Message #34 received at 21241 <at> debbugs.gnu.org (full text, mbox):

From: Michael Albinus <michael.albinus <at> gmx.de>
To: Tassilo Horn <tsdh <at> gnu.org>
Cc: 21241 <at> debbugs.gnu.org
Subject: Re: bug#21241: 25.0.50;
 gfilenotify doesn't indicate when limits are reached
Date: Fri, 21 Aug 2015 11:46:28 +0200
Tassilo Horn <tsdh <at> gnu.org> writes:

> So I've tried the following:
>
> diff --git a/src/gfilenotify.c b/src/gfilenotify.c
> index 08713a8..2ad2110 100644
> --- a/src/gfilenotify.c
> +++ b/src/gfilenotify.c
> @@ -172,8 +172,9 @@ will be reported only in case of the 'moved' event.  */)
>      gflags |= G_FILE_MONITOR_SEND_MOVED;
>  
>    /* Enable watch.  */
> -  monitor = g_file_monitor (gfile, gflags, NULL, NULL);
> -  if (! monitor)
> +  GError *err = NULL;
> +  monitor = g_file_monitor (gfile, gflags, NULL, &err);
> +  if (! monitor || err != NULL)
>      xsignal2 (Qfile_notify_error, build_string ("Cannot watch file"), file);
>  
>    Lisp_Object watch_descriptor = make_pointer_integer (monitor);

For the records, I've committed a modified version of this patch. It
returns the error message from g_file_monitor, if present.

Best regards, Michael.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 18 Sep 2015 11:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 9 years and 4 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.