-
This release lays foundational groundwork for macFUSE 5.0
-
Decouple kernel extension version from release version. In future macFUSE releases, the kernel extension will only be updated in case there have been code changes of the macFUSE kernel code. This avoids prompting users to allow loading a new kernel extension build.
-
Address a race condition in the libfuse mount process. On macOS, the mount process is asynchronous. This means that
mount(2)
will not have returned whenfuse_mount()
returns, but we are interested in themount(2)
return code. Therefore, we spin up a separate thread that waits formount(2)
to return. -
Use dispatch source to handle signals in libfuse. Mounted volumes are unmounted on
SIGHUP
,SIGINT
andSIGTERM
. We should not assume that unmounting a volume is async-signal safe. This means we should not rely onsigaction(2)
handlers to perform the unmount operation. -
Add support for using Grand Central Dispatch to process file system requests in libfuse. See
fuse_loop_dispatch()
for details. This reduces the number of threads being created and destroyed and cuts down on resource usage.fuse_session_loop_dispatch()
is a drop-in replacement forfuse_session_loop_mt()
. -
Add high-level libfuse mount-time option
loop
. Theloop
option can be used to select the file system request processing loop implementation. Supported values are:single_threaded
: Process requests seriallymulti_threaded
: Process requests in parallel on worker threads managed by libfusedispatch
: Process requests in parallel using Grand Central Dispatch
The default implementation is
multi_threaded
. When mount option-s
(single threaded) is present, optionloop
is ignored. -
Use dispatch semaphores as fallback for unnamed POSIX semaphores in libfuse. Unnamed POSIX semaphores are not supported by macOS. Therefore, we have been using a custom fallback implementation based on POSIX threads, which is now replaced by dispatch semaphores.
-
Silence
pthread_setugid_np()
deprecation warnings in libfuse -
Modernize build script
- The build script requires Bash 4.1 or a later Bash release
- Improve support for incremental builds by adding support for caching build artifacts in a global cache.
- Improve build performance.
-
Clean up code and improve readability
-
Archive loader and mounter debug symbols
-
Update links in release disk image
-
Complete move of all project resources from the osxfuse organization to the macfuse organization. See History for details.