gunixmounts: Prevent "mounts-changed" race if /etc/mtab is used

The /etc/mtab file is still used by some distributions (e.g. Slackware),
so it has to be monitored instead of /proc/self/mountinfo in order to
avoid races between g_unix_mounts_get and "mounts-changed" signal. The
util-linux is built with --enable-libmount-support-mtab in that case and
mnt_has_regular_mtab is used for checks. Let's use mnt_has_regular_mtab
also to determine which file to monitor.

https://bugzilla.gnome.org/show_bug.cgi?id=779607
This commit is contained in:
Ondrej Holy 2017-07-17 15:53:24 +02:00
parent b267f648d9
commit 2db36d0d5c

View File

@ -550,7 +550,15 @@ get_mtab_monitor_file (void)
return mountinfo_path; return mountinfo_path;
#ifdef HAVE_LIBMOUNT #ifdef HAVE_LIBMOUNT
/* If using libmount we'll have the logic in place to read mountinfo */ /* The mtab file is still used by some distros, so it has to be monitored in
* order to avoid races between g_unix_mounts_get and "mounts-changed" signal:
* https://bugzilla.gnome.org/show_bug.cgi?id=782814
*/
if (mnt_has_regular_mtab (&mountinfo_path, NULL))
{
return mountinfo_path;
}
if (stat (PROC_MOUNTINFO_PATH, &buf) == 0) if (stat (PROC_MOUNTINFO_PATH, &buf) == 0)
{ {
mountinfo_path = PROC_MOUNTINFO_PATH; mountinfo_path = PROC_MOUNTINFO_PATH;