db/update/InotifyUpdate: handle IN_CREATE without IN_ISDIR
A new symlink causes `IN_CREATE`. Usually, we catch `IN_CREATE` only with IN_ISDIR to watch the new directory, but otherwise `IN_CREATE` is not handled. Regular files are "created" but they have usable content only with `IN_CLOSE_WRITE`. Yet symlinks have only `IN_CREATE` and they are immediately usable. Closes https://github.com/MusicPlayerDaemon/MPD/issues/2192
This commit is contained in:
2
NEWS
2
NEWS
@@ -1,6 +1,8 @@
|
|||||||
ver 0.23.17 (not yet released)
|
ver 0.23.17 (not yet released)
|
||||||
* storage
|
* storage
|
||||||
- nfs: require libnfs 4.0 or later
|
- nfs: require libnfs 4.0 or later
|
||||||
|
* database
|
||||||
|
- inotify: trigger update after symlink was created
|
||||||
* support libfmt 11.1
|
* support libfmt 11.1
|
||||||
|
|
||||||
ver 0.23.16 (2024/12/03)
|
ver 0.23.16 (2024/12/03)
|
||||||
|
@@ -293,6 +293,10 @@ InotifyUpdate::InotifyCallback(int wd, unsigned mask,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((mask & (IN_CLOSE_WRITE|IN_MOVE|IN_DELETE)) != 0 ||
|
if ((mask & (IN_CLOSE_WRITE|IN_MOVE|IN_DELETE)) != 0 ||
|
||||||
|
/* regular file or symlink was created; this check is only
|
||||||
|
interesting for symlinks because regular files have
|
||||||
|
usable content only after IN_CLOSE_WRITE */
|
||||||
|
(mask & (IN_CREATE|IN_ISDIR)) == IN_CREATE ||
|
||||||
/* at the maximum depth, we watch out for newly created
|
/* at the maximum depth, we watch out for newly created
|
||||||
directories */
|
directories */
|
||||||
(directory.GetDepth() == max_depth &&
|
(directory.GetDepth() == max_depth &&
|
||||||
|
Reference in New Issue
Block a user