Re: Unison hangs after macfuse 5.0.7 update

Greg Troxel <[email protected]> Thu, 16 Oct 2025 07:14:17 -0400
Newsgroups gmane.network.unison.general
Message-ID <[email protected]>
Lluc Pallej=C3=A0 <[email protected]> writes:

> I have no idea whether this is an issue with macfuse or Unison
> maybe?.. the thing is using macfuse 5.0.7 everything runs fine, I can
> mount the folder with gocryptfs, I can open files.. the only issue is
> when synchronizing using Unison.

I'm guessing of course, but:

  - we have no other reports of problems like this
    + however I suspect not many people use macfuse/gocryptfs
  - you have repeatably shown unison works with macfuse 5.0.6 and not
    with 5.0.7

so that puts more of the probability on macfuse.

But that's only helpful in choosing a strategy; the point is to figure
out what's wrong so it can be fixed, whereever that might be.

It is possible that unison does some VFS operation via macfuse/gocryptfs
that don't happen during normal operations, or with unusual arguments,
and it's only that corner case that is troubled.

It's of course possible that there's been a bug in Unison ~forever that
is only triggered by legit but unusual results.

I would suggest (not really ordered):

  - sync locally, APFS to gocryptfs, and then gocryptfs to gocryptfs

  - build unison from git master, and run make test.  Assuming that's
    ok, unpack the sources in a gocryptfs folder and repeat.  Read the
    tests enough to see if it uses /tmp and if so repoint to inside the
    build dir so that the test repos are in gocryptfs.

  - run some filesystem tester in macfuse/gocryptfs.  Not sure what one
    to suggest, but if you find one that's useful and portable please
    let me know.

  - turn on debugging in macfuse and gocryptfs.   Reading the above, I
    see traces of unison talking to peer, but I am not seeing system
    calls.  My guess is that unison is doing some fs operations locally
    after ending the lockArchive request, and getting hung up there.   I
    use "ktrace" on NetBSD all the time, and I see that macOS 15 has
    this too.

    There is also dtrace, which I believe is more powerful, but it's on
    my list of things to learn so other than pointing you at dtrace, I
    don't have much to offer.

  - read the commit logs in macfuse's version-control system between
    those tags.

  - build macfuse from source and bisect between tags.  This sounds
    crazy, but once you can build I suspect it is not really that hard.
    Once you find the commit that provokes trouble, I suspect things
    will be easier to figure out.

But all that said, I'd first re-run your above tests with ktrace as the
easiest thing likely to surface new information.

To unsubscribe from this group and stop receiving emails from it, send an e=
mail to [email protected].