glib/gio/inotify
Ryan Lortie 3d2d4b8efe inotify: send CHANGES_DONE when new files 'appear'
We generally assume that an IN_CREATE event is the start of a series of
events in which another process is doing this:

  fd = creat (...)         -> IN_CREATE
  write (fd, ..)           -> IN_MODIFY
  write (fd, ..)           -> IN_MODIFY
  close (fd)               -> IN_CLOSE_WRITE

and as such, we use the CHANGES_DONE_HINT event after CREATED in order
to show when this sequence of events has completed (ie: when we receive
IN_CLOSE_WRITE when the user closes the file).

Renaming a file into place is handled by IN_MOVED_FROM so we don't have
to worry about that.

There are many other cases, however, where a new file 'appears' in a
directory in its completed form already, and the kernel reports
IN_CREATE.  Examples include mkdir, mknod, and the creation of
hardlinks.  In these cases, there is no corresponding IN_CLOSE_WRITE
event and the CHANGES_DONE_HINT will have to be emitted by an arbitrary
timeout.

Try to detect some of these cases and report CHANGES_DONE_HINT
immediately.

This is not perfect.  There are some cases that will not be reliably
detected.  An example is if the user makes a hardlink and then
immediately deletes the original (before we can stat the new file).
Another example is if the user creates a file with O_TMPFILE.  In both
of these cases, CHANGES_DONE_HINT will still eventually be delivered via
the timeout.
2015-03-20 12:01:34 -04:00
..
ginotifydirectorymonitor.c substantially rework file monitors 2015-03-20 11:59:47 -04:00
ginotifydirectorymonitor.h Updated FSF's address 2014-01-31 14:31:55 +01:00
ginotifyfilemonitor.c substantially rework file monitors 2015-03-20 11:59:47 -04:00
ginotifyfilemonitor.h substantially rework file monitors 2015-03-20 11:59:47 -04:00
inotify-helper.c inotify: send CHANGES_DONE when new files 'appear' 2015-03-20 12:01:34 -04:00
inotify-helper.h Updated FSF's address 2014-01-31 14:31:55 +01:00
inotify-kernel.c substantially rework file monitors 2015-03-20 11:59:47 -04:00
inotify-kernel.h inotify: rewrite inotify-kernel 2015-03-20 11:58:42 -04:00
inotify-missing.c Updated FSF's address 2014-01-31 14:31:55 +01:00
inotify-missing.h Updated FSF's address 2014-01-31 14:31:55 +01:00
inotify-path.c substantially rework file monitors 2015-03-20 11:59:47 -04:00
inotify-path.h Updated FSF's address 2014-01-31 14:31:55 +01:00
inotify-sub.c substantially rework file monitors 2015-03-20 11:59:47 -04:00
inotify-sub.h substantially rework file monitors 2015-03-20 11:59:47 -04:00
Makefile.am substantially rework file monitors 2015-03-20 11:59:47 -04:00