xaizek / vifm (License: GPLv2+) (since 2018-12-07)
Vifm is a file manager with curses interface, which provides Vi[m]-like environment for managing objects within file systems, extended with some useful ideas from mutt.
Commit 2c20abd8c9d691de2594b0602e45082e89a6f242

Fix FUSE unmounting not working on FreeBSD 15.0+
FreeBSD has added an implementation of inotify that Vifm picks up during
configuration. Yet, unlike on Linux, inotify descriptors count as a
directory use in the kernel and prevent unmounting.

Thanks to abi at Vifm Q2A site.

See
https://q2a.vifm.info/2526/unable-to-umount-fuse-when-i-try-to-leave-directory
Author: xaizek
Author date (UTC): 2026-10-20 09:16
Committer name: xaizek
Committer date (UTC): 2026-10-20 09:19
Parent(s): 2624fe6071ea74c9c863cb718cb11bb947c6963e
Signing key: 99DC5E4DB05F6BE2
Tree: 1fcf0d62918605d7f945c2a4e714c7aaa1418856
File Lines added Lines deleted
ChangeLog 4 0
THANKS 1 0
src/int/fuse.c 7 0
File ChangeLog changed (mode: 100644) (index 924c75ffe..ea4d8e06a)
50 50
51 51 Fixed an unlikely memory leak on discovering .desktop files. Fixed an unlikely memory leak on discovering .desktop files.
52 52
53 Fixed FUSE unmounting not working on FreeBSD 15.0 or later, which has
54 added an implementation of inotify that, unlike on Linux, counts as a
55 directory use and prevents unmounting. Thanks to abi at Vifm Q2A site.
56
53 57 0.14.3 to 0.14.4 (2026-05-31) 0.14.3 to 0.14.4 (2026-05-31)
54 58
55 59 Added example of handling .deb-files to sample vifmrc. Patch by Kirill Added example of handling .deb-files to sample vifmrc. Patch by Kirill
File THANKS changed (mode: 100644) (index e8f15bf0d..6470d4be6)
... ... and testing of large number of features:
12 12 45jqlakjrf87ayte7hy34ter4nguijauzl4eitk 45jqlakjrf87ayte7hy34ter4nguijauzl4eitk
13 13 702b 702b
14 14 Abdó Roig-Maranges (aroig) Abdó Roig-Maranges (aroig)
15 abi
15 16 AERDU AERDU
16 17 afsheenb afsheenb
17 18 Afz Afz
File src/int/fuse.c changed (mode: 100644) (index ba3bb525d..9499bab2a)
... ... fuse_try_unmount(view_t *view)
551 551 return -1; return -1;
552 552 } }
553 553
554 /* This is motivated by FreeBSD's implementation of inotify which prevents
555 * unmounting, but may as well do it everywhere just in case FreeBSD isn't
556 * the only one. This shouldn't affect performance much and the watcher
557 * will be restored on its next use. */
558 fswatch_free(view->watch);
559 view->watch = NULL;
560
554 561 ui_sb_msg("FUSE unmounting selected file, please stand by..."); ui_sb_msg("FUSE unmounting selected file, please stand by...");
555 562 int status = run_fuse_command(unmount_cmd, /*cancelled=*/NULL, int status = run_fuse_command(unmount_cmd, /*cancelled=*/NULL,
556 563 /*errors=*/NULL); /*errors=*/NULL);
Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/vifm

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/vifm

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master